Modul 2 (Set dan Map) - Algoritma-dan-Pemrograman-ITS/StrukturData GitHub Wiki
std::set
dan std::map
merupakan STL container yang menerapkan ADT Self-Balancing BST dalam implementasinya.
Jika std::set
hanya menyimpan satu nilai (key), maka std::map
menyimpan sepasang nilai (key and value).
Modul ini akan menjelaskan cara menggunakan kedua STL container tersebut.
-
#include <bits/stdc++.h> using namespace std; int main(){ set<int> s; if(s.empty()){ cout << "set ini kosong" << endl; } return 0; }
-
#include <bits/stdc++.h> using namespace std; int main(){ set<int> s; s.insert(4); s.insert(3); s.insert(2); s.insert(1); for(auto i = s.begin(); i != s.end(); i++){ cout << *i << endl; } return 0; }
std::set akan secara otomatis mengurutkan data secara ascending. Ingin menampilkan data secara descending? Gunakanlah fungsi rbegin() dan rend() atau lihat pada contoh dibawah.
#include <bits/stdc++.h> using namespace std; int main(){ set<int, greater<int>> s; s.insert(4); s.insert(3); s.insert(2); s.insert(1); for(auto i = s.begin(); i != s.end(); i++){ cout << *i << endl; } return 0; }
catatan: std::set tidak dapat menyimpan dua nilai yang sama
-
#include <bits/stdc++.h> using namespace std; int main(){ set<int> s; s.insert(4); s.insert(3); s.insert(2); s.insert(1); auto pointer = s.find(5); if(pointer == s.end()){ cout << "data tidak ditemukan" << endl; } else{ cout << "data ditemukan" << endl; } return 0; }
-
#include <bits/stdc++.h> using namespace std; int main(){ set<int> s; s.insert(4); s.insert(3); s.insert(2); s.insert(1); s.erase(2); // tidak menggunakan iterator for(auto i = s.begin(); i != s.end(); i++){ cout << *i << endl; } return 0; }
#include <bits/stdc++.h> using namespace std; int main(){ set<int> s; s.insert(4); s.insert(3); s.insert(2); s.insert(1); auto pointer = s.find(2); s.erase(pointer); // menggunakan iterator for(auto i = s.begin(); i != s.end(); i++){ cout << *i << endl; } return 0; }
Selengkapnya mengenai std::set
dapat dibaca di sini atau pada dokumentasi bahasa C++ di sini.
-
#include <bits/stdc++.h> using namespace std; int main(){ map<int, int> m; if(m.empty()){ cout << "map ini kosong" << endl; } return 0; }
-
Ada banyak cara untuk memasukkan nilai pada
std::map
.#include <bits/stdc++.h> using namespace std; int main(){ map<int, int> m; m.insert({1, 2}); // secara langsung m.insert(make_pair(2, 3)); // menggunakan fungsi make_pair m.insert(pair<int, int>(3, 4)); // membuat object pair, sama seperti contoh sebelumnya m[4] = 5; // menggunakan indexing m[5]++; // increment for(auto i = m.begin(); i != m.end(); i++){ cout << i->first << " " << i->second << endl; } return 0; }
Bagaimana jika kita ingin agar data key dalam
std::map
terurut secara descending?#include <bits/stdc++.h> using namespace std; int main(){ map<int, int, greater<int>> m; m.insert({1, 2}); m.insert(make_pair(2, 3)); m.insert(pair<int, int>(3, 4)); m[4] = 5; m[5]++; for(auto i = m.begin(); i != m.end(); i++){ cout << i->first << " " << i->second << endl; } return 0; }
-
#include <bits/stdc++.h> using namespace std; int main(){ map<int, int> m; m.insert({1, 2}); m.insert(make_pair(2, 3)); m.insert(pair<int, int>(3, 4)); m[4] = 5; m[5]++; auto pointer = m.find(1); /* menggunakan fungsi find mengembalikan iterator yang menunjuk pada elemen map dengan nilai key = 1 */ if(pointer != m.end()){ cout << pointer->first << " " << pointer->second << endl; } cout << m[5] << endl; /* indexing, hanya menampilkan value pada elemen map dengan nilai key = 5 */ return 0; }
-
#include <bits/stdc++.h> using namespace std; int main(){ map<int, int> m; m.insert({1, 2}); m.insert(make_pair(2, 3)); m.insert(pair<int, int>(3, 4)); m[4] = 5; m[5]++; m[6] = 6; m.erase(1); // menghapus elemen map dengan key = 1 auto pointer1 = m.find(2); m.erase(pointer1); // menggunakan iterator dari fungsi find auto pointer2 = m.find(5); m.erase(m.begin(), pointer2); // menghapus semua elemen dengan key < 5 m[5] = 0; /* tidak benar-benar menghapus, hanya merubah value menjadi 0 pada elemen dengan key = 5 */ for(auto i = m.begin(); i != m.end(); i++){ cout << i->first << " " << i->second << endl; } return 0; }
Selengkapnya mengenai std::map
dapat dibaca di sini atau pada dokumentasi bahasa C++ di sini.