Skip to content

Modul 2 (Set dan Map)

hq_lco edited this page Mar 13, 2024 · 1 revision

Set dan Map

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.

std::set

  • set::empty()

    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
        set<int> s;
    
        if(s.empty()){
            cout << "set ini kosong" << endl;
        }
    
        return 0;
    }
  • set::insert()

    #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

  • set::find()

    #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;
    }
  • set::erase()

    #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.

std::map

  • map::empty()

    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
        map<int, int> m;
    
        if(m.empty()){
            cout << "map ini kosong" << endl;
        }
    
        return 0;
    }
  • map::insert()

    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;
    }
  • map::find()

    #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;
    }
  • map::erase()

    #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.

Navigasi

Modul 1

Modul 2

Modul 3

Clone this wiki locally