STL

Standard Template Library (STL) adalah sekumpulan class dalam bahasa C++ yang berisi function dan template-template struktur data yang umum digunakan dalam pemrograman.

Penanganan data suatu variabel dalam dalam STL akan disesuaikan dengan jenis containernya. STL menyediakan beberapa jenis container sebagai penyimpan data dengan struktur yang berbeda-beda. Container-container tersebut yaitu :
  • Object array
  • vector
  • deque
  • List
  • queue
  • priority_queue
  • stack
  • set
  • multiset
  • map
  • multimap
  • unordered_set (mulai ada dalam C++11)
  • unordered_multiset (mulai ada dalam C++11)
  • unordered_map (mulai ada dalam C++11)
  • unordered_multimap (mulai ada dalam C++11)
  • forward_list(mulai ada dalam C++11)

Setiap container memiliki method-method khusus yang akan berbeda sesuai jenis containernya. Header yang mendeklarasikan container tersebut perlu disertakan di awal program. Kalian bisa melihat contoh penggunaan STL di bawah ini.

#include <iostream>
using namespace std;

#include <array>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <map>
#include <set>
#include <list>
#include <forward_list>
#include <unordered_map>
#include <unordered_set>

int main(){
	//deklarasi container
	array<int, 10> arr;
	stack<int> tumpukan;
	queue<int> antrian;
	deque<int> dq;
	vector<int> vektor;
	map<string, int> mapku1;
	multimap<string, int> mapku2;
	set<int> himpunan1;
	multiset<int> himpunan2;
	unordered_set<int> himpunan3;
	list<int> daftar1;
	forward_list<int> daftar2;
	
	//tambah data
	arr[0]=1;
	tumpukan.push(2);
	antrian.push(3);
	dq.push_front(4);
	vektor.push_back(5);
	mapku1.insert(pair<string, int>("enam", 6));
	mapku2.insert(pair<string, int>("tujuh", 7));
	daftar1.push_front(8);
	daftar2.push_front(9);
	himpunan1.insert(10);
	himpunan2.insert(11);
	himpunan3.insert(12);
	
	//Tampilkan satu data
	cout << arr[0] << endl;
	cout << tumpukan.top() << endl;
	cout << antrian.front() << endl;
	cout << dq.at(0) << endl;
	cout << vektor.at(0) << endl;
	cout << mapku1.at("enam") << endl;
	auto p=mapku2.find("tujuh");cout << p->second << endl;
	
	//Hapus data
	tumpukan.pop();
	antrian.pop();
	dq.pop_front();
	vektor.pop_back();
	mapku1.erase("enam");
	mapku2.erase("tujuh");
	daftar1.pop_front();
	daftar2.pop_front();
	himpunan1.erase(10);
	himpunan2.erase(11);
	himpunan3.erase(12);
}
Output :
1
2
3
4
5
6
7

Selain arrray, semua container STL memiliki penyimpanan dinamis. Kalian bisa menambah dan menghapus isinya. Beberapa container hanya bisa ditambah dan dihapus isinya mulai dari ujung.

Iterator

Untuk mendapatkan data pada posisi tertentu berdasarkan indeksnya kalian umumnya bisa menggunakan method at() atau operator []. Tapi, tidak semua container STL bisa diakses berdasarkan indeksnya. Contoh container yang harus diakses semua datanya saat ditampilkan misalnya set, unordered_set, dan multiset.

Kalian bisa menggunakan method back untuk melihat isi terakhir container selain set, unordered_set, & multiset. Method front bisa digunakan untuk melihat isi pertama container selain set, unordered_set, multi_set, dan stack.

Kalian bisa menggunakan iterator khusus sesuai tipe container. Variabel iterator bisa dideklarasikan seperti saat deklarasi variabel container dengan menambahkan ::iterator. Misalnya, jika kalian menggunakan "vector<tipe_data> nama_variabel;", maka deklarasi iteratornya adalah "vector<tipe_data>::iterator nama_variabel;".

Iterator digunakan di dalam loop, terutama for, seperti saat menggunakan pointer. Pointer awal dari iterator didapat dengan method begin. Sebaliknya, pointer akhir bisa didapatkan dengan method end. Untuk menggeser pointer iterator, kalian bisa menggunakan operator increment(++);

Untuk urutan terbalik, kalian bisa menggunakan method rbegin, rend, dan ::iterator. Tapi, tidak semua container STL memiliki reverse iterator.

#include <iostream>
#include <set>

using namespace std;

int main(){
    //deklarasi container
    set<string> dataku={"saya", "kamu", "dia"};
    set<string>::iterator it;
    set<string>::reverse_iterator iti;
    
    cout << "urutan normal : ";
    for(it=dataku.begin();it!=dataku.end();it++)cout << *it << " ";
        cout << endl << "urutan terbalik : ";
    for(iti=dataku.rbegin();iti!=dataku.rend();iti++)cout << *iti << " ";
}
Output :
urutan normal : dia kamu saya
urutan terbalik : saya kamu dia

Jika kalian tidak mau repot, kalian bisa menggunakan auto untuk mengganti tipe data iteratornya.

Swap

Function swap digunakan untuk menukar isi dari dua container STL yang sama jenisnya.
#include <iostream>
#include <array>

int main(){
        std::array<int, 5> a1={1, 2, 3, 4, 5};
        std::array<int, 5> a2={6, 7, 8, 9, 10};
	
        std::cout << std::endl << "a1 : ";
        for(auto iti=a1.rbegin();iti!=a1.rend();iti++)std::cout << *iti << " ";
        std::cout << std::endl << "a2 : ";
        for(auto iti=a2.rbegin();iti!=a2.rend();iti++)std::cout << *iti << " "; 

        std::cout << std::endl << "Tukar ...." << std::endl;

        std::swap(a1, a2);
        std::cout << std::endl << "a1 : ";
        for(auto iti=a1.rbegin();iti!=a1.rend();iti++)std::cout << *iti << " ";
        std::cout << std::endl << "a2 : ";
        for(auto iti=a2.rbegin();iti!=a2.rend();iti++)std::cout << *iti << " "; 
}
Output :
a1 : 5 4 3 2 1
a2 : 10 9 8 7 6
Tukar ....

a1 : 10 9 8 7 6
a2 : 5 4 3 2 1
Function swap bisa digunakan hampir pada semua jenis container STL.