Cara menggunakan C++ Unordered Map

How Use C Unordered Map



Peta, juga dikenal sebagai array asosiatif adalah daftar elemen, di mana setiap elemen adalah pasangan kunci/nilai. Jadi, setiap kunci sesuai dengan nilai. Kunci yang berbeda dapat memiliki nilai yang sama, untuk pekerjaan biasa. Misalnya, kunci dapat berupa daftar buah dan nilai yang sesuai, warna buah. Dalam C++, peta diimplementasikan sebagai struktur data dengan fungsi anggota dan operator. Peta terurut adalah peta di mana pasangan elemen telah diurutkan berdasarkan kunci. Peta yang tidak teratur adalah peta yang tidak memiliki keteraturan. Artikel ini menjelaskan cara menggunakan C++ unordered map, ditulis sebagai unordered_map. Anda memerlukan pengetahuan tentang pointer C++ untuk memahami artikel ini. unordered_map adalah bagian dari pustaka standar C++.

Kelas dan Objek

Kelas adalah sekumpulan variabel dan fungsi yang bekerja sama, di mana variabel tidak memiliki nilai yang ditetapkan. Ketika nilai ditugaskan ke variabel, kelas menjadi objek. Nilai berbeda yang diberikan pada kelas yang sama menghasilkan objek yang berbeda; yaitu, objek yang berbeda adalah kelas yang sama dengan nilai yang berbeda. Membuat objek dari kelas dikatakan membuat objek.







Nama, unordered_map, adalah sebuah kelas. Objek yang dibuat dari kelas unordered_map memiliki nama yang dipilih programmer.



Fungsi yang termasuk dalam kelas diperlukan untuk membuat instance objek dari kelas. Dalam C++, fungsi tersebut memiliki nama yang sama dengan nama kelasnya. Objek yang dibuat (diinstantiated) dari kelas memiliki nama berbeda yang diberikan kepada mereka, oleh programmer.



Membuat objek dari kelas berarti membangun objek; itu juga berarti instantiating.





Program C++ yang menggunakan kelas unordered_map, dimulai dengan baris berikut di bagian atas file:

#termasuk
#termasuk
menggunakan namespace std;

Baris pertama adalah untuk input/output. Baris kedua adalah mengizinkan program untuk menggunakan semua fitur dari kelas unordered_map. Baris ketiga memungkinkan program untuk menggunakan nama dalam namespace standar.



Membebani Fungsi

Ketika dua atau lebih tanda tangan fungsi yang berbeda memiliki nama yang sama, nama tersebut dikatakan kelebihan beban. Ketika satu fungsi dipanggil, jumlah dan jenis argumen, tentukan fungsi mana yang benar-benar dieksekusi.

Konstruksi/Salin Konstruksi

Konstruksi Sederhana

Peta yang tidak berurutan dapat dibangun dan diberi nilai sebagai berikut:

unordered_map<konstan arang*, konstan arang**umap;

umap['pisang'] = 'kuning';
umap['anggur'] = 'hijau';
umap['ara'] = 'ungu';

Deklarasi dimulai dengan spesialisasi template dengan tipe untuk pasangan kunci dan nilai. Ini diikuti oleh nama yang dipilih programmer untuk peta; kemudian titik koma. Segmen kode kedua menunjukkan cara menetapkan nilai ke kunci mereka.
Konstruksi oleh Initializer_list
Hal ini dapat dilakukan sebagai berikut:

unordered_map<konstan arang*, konstan arang**umap({{'pisang', 'kuning'},
{'anggur', 'hijau'}, {'ara', 'ungu'}});

Konstruksi dengan menetapkan Initializer_list
Contoh:

unordered_map<konstan arang*, konstan arang**umap= {{'pisang', 'kuning'},
{'anggur', 'hijau'}, {'ara', 'ungu'}};

Konstruksi dengan menyalin unordered_map lain
Contoh:

unordered_map<konstan arang*, konstan arang**umap1({{'pisang', 'kuning'},
{'anggur', 'hijau'}, {'ara', 'ungu'}});
unordered_map<konstan arang*, konstan arang**umap2(umap1);

Elemen pasangan

Kode berikut menunjukkan cara membuat dan mengakses elemen pasangan:

pasangan<arang, konstan arang**pra= {'D', 'menjadi'};
biaya<<hal.pertama << ' ';
biaya<<hal.kedua << ' ';

Outputnya adalah:

D
menjadi

pertama dan kedua adalah kata-kata yang dicadangkan untuk dua item dalam pasangan. Nilai dalam pasangan masih dapat diubah menggunakan pertama dan kedua.

Sepasang disebut, value_type dalam topik peta yang tidak berurutan.

Akses Elemen unordered_map

mapped_type& operator[](key_type&& k)
Mengembalikan nilai untuk kunci yang sesuai. Contoh:

unordered_map<konstan arang*, konstan arang**umap;

umap['pisang'] = 'kuning';
umap['anggur'] = 'hijau';
umap['ara'] = 'ungu';

konstan arang *Baik=umap['anggur'];

biaya<<Baik<<' ';

Outputnya adalah: hijau. Nilai dapat diberikan dengan cara yang sama – lihat di atas.

Kapasitas unordered_map

size_type size() const noexcept
Mengembalikan jumlah pasangan di peta.

unordered_map<konstan arang*, konstan arang**umap;

umap['pisang'] = 'kuning';
umap['anggur'] = 'hijau';
umap['ara'] = 'ungu';

biaya<<umap.ukuran() <<' ';

Keluarannya adalah 3.

bool kosong() const noexcept

Mengembalikan 1 untuk true jika peta tidak memiliki pasangan, dan 0 untuk false jika peta memiliki pasangan. Contoh:

unordered_map<konstan arang*, konstan arang**umap;
biaya<<umap.kosong() <<' ';

Keluarannya adalah 1.

Mengembalikan Iterator dan Kelas peta tidak berurutan

Iterator seperti pointer tetapi memiliki lebih banyak fungsi daripada pointer.

mulai() tidak kecuali

Mengembalikan iterator yang menunjuk ke pasangan pertama objek peta, seperti pada segmen kode berikut:

unordered_map<konstan arang*, konstan arang**umap;

umap['pisang'] = 'kuning';umap['anggur'] = 'hijau';umap['ara'] = 'ungu';

unordered_map<konstan arang*, konstan arang**> ::pembuat ulangiter=umap.mulai();
pasangan<konstan arang*, konstan arang**pra= *iter;
biaya<<hal.pertama << ',' <<hal.kedua << ' ';

Outputnya adalah: ara, ungu. Peta tidak teratur.

mulai() const nokecuali;

Mengembalikan iterator yang menunjuk ke elemen pertama dari koleksi objek peta. Ketika konstruksi objek didahului oleh const, ekspresi begin() const dijalankan alih-alih begin(). Dalam kondisi ini, elemen dalam objek tidak dapat diubah. Ini digunakan dalam kode berikut, misalnya.

konstanunordered_map<konstan arang*, konstan arang**umap({{'pisang', 'kuning'},
{'anggur', 'hijau'}, {'ara', 'ungu'}});

unordered_map<konstan arang*, konstan arang**> ::const_iteratoriter=umap.mulai();
pasangan<konstan arang*, konstan arang**pra= *iter;
biaya<<hal.pertama << ',' <<hal.kedua << ' ';

Outputnya adalah: ara, ungu. Peta tidak teratur. Perhatikan bahwa const_iterator telah digunakan kali ini, bukan hanya iterator, untuk menerima iterator yang dikembalikan.

akhir() tidak kecuali

Mengembalikan iterator yang menunjuk tepat di luar elemen terakhir dari objek peta.

end() const nokecuali

Mengembalikan iterator yang menunjuk tepat di luar elemen terakhir dari objek peta. Ketika konstruksi objek peta didahului oleh const, ekspresi end() const akan dieksekusi alih-alih end().

Operasi unordered_map

iterator find(const key_type& k)

Mencari sepasang kunci yang diberikan di peta. Jika ditemukan, ia mengembalikan iterator. Jika tidak ditemukan, ia mengembalikan iterator yang menunjuk ke ujung peta, yang bukan merupakan pasangan. Kode berikut menunjukkan cara menggunakan fungsi anggota ini:

unordered_map<arang,arang>umap;

umap['ke'] = 'B';umap['C'] = 'D';umap['Dan'] = 'F';

unordered_map<arang,arang> ::pembuat ulangiter=umap.Temukan('C');
jika (umap.Temukan('C') ! =umap.akhir())
{
pasangan<arang,arang>pra= *iter;
biaya<<hal.pertama << ',' <<hal.kedua << ' ';
}

Outputnya adalah: c, d

const_iterator temukan(const key_type& k) const;

Versi fungsi ini disebut, jika pembuatan peta tidak berurutan dimulai dengan const, membuat semua elemen peta hanya-baca.

unordered_map Pengubah

sisipkan pasangan (tipe_nilai&& obj)
Peta yang tidak berurutan berarti pasangan tidak dalam urutan apa pun. Jadi, program menyisipkan pasangan di tempat mana pun yang dirasa nyaman. Fungsi kembali, pasangan. Jika penyisipan berhasil, bool akan menjadi 1 untuk benar, jika tidak maka akan menjadi 0 untuk salah. Jika penyisipan berhasil, maka iterator akan menunjuk ke elemen yang baru dimasukkan. Kode berikut mengilustrasikan penggunaan:

unordered_map<konstan arang*, konstan arang**umap;

umap['pisang'] = 'kuning';
umap['anggur'] = 'hijau';
umap['ara'] = 'ungu';

umap.memasukkan({{'ceri', 'bersih'}, {'stroberi', 'bersih'}});

biaya<<umap.ukuran() << ' ';

Outputnya adalah: 5. Lebih dari satu pasang dapat dimasukkan.

size_type hapus(const key_type& k)

Fungsi ini menghapus pasangan dari unordered_map. Segmen kode berikut menggambarkan:

unordered_map<konstan arang*, konstan arang**umap;

umap['pisang'] = 'kuning';
umap['anggur'] = 'hijau';
umap['ara'] = 'ungu';

ke dalampada satu=umap.menghapus('anggur');

biaya<<umap.ukuran() << ' ';

Keluarannya adalah 2.
batalkan swap(unordered_map&)
Dua peta yang tidak berurutan dapat ditukar, seperti yang diilustrasikan dalam segmen kode ini:

unordered_map<konstan arang*, konstan arang**umap1= {{'pisang', 'kuning'},
{'anggur', 'hijau'}, {'ara', 'ungu'}, {'stroberi', 'bersih'}};

unordered_map<konstan arang*, konstan arang**umap2= {{'ceri', 'bersih'}, {'jeruk nipis', 'hijau'}};

umap1.menukar(umap2);

unordered_map<konstan arang*, konstan arang**> ::pembuat ulangiter1=umap1.mulai();
pasangan<konstan arang*, konstan arang**pr1= *iter1;
unordered_map<konstan arang*, konstan arang**> ::pembuat ulangiter2=umap2.mulai();
pasangan<konstan arang*, konstan arang**pr2= *iter2;

biaya<< 'Kunci pertama dan ukuran umap1:'<<pr1.pertama <<','<<umap1.ukuran() << ' ';
biaya<< 'Kunci pertama dan ukuran umap2'<<pr2.pertama <<','<<umap2.ukuran() << ' ';
unordered_map<konstan arang*, konstan arang**umap1= {{'pisang', 'kuning'},
{'anggur', 'hijau'}, {'ara', 'ungu'}, {'stroberi', 'bersih'}};
unordered_map<konstan arang*, konstan arang**umap2= {{'ceri', 'bersih'}, {'jeruk nipis', 'hijau'}};

umap1.menukar(umap2);

unordered_map<konstan arang*, konstan arang**> ::pembuat ulangiter1=umap1.mulai();
pasangan<konstan arang*, konstan arang**pr1= *iter1;
unordered_map<konstan arang*, konstan arang**> ::pembuat ulangiter2=umap2.mulai();
pasangan<konstan arang*, konstan arang**pr2= *iter2;

biaya<< 'Kunci pertama dan ukuran umap1:'<<pr1.pertama <<','<<umap1.ukuran() << ' ';
biaya<< 'Kunci pertama dan ukuran umap2'<<pr2.pertama <<','<<umap2.ukuran() << ' ';

Outputnya adalah:

Kunci pertama dan ukuran umap1: kapur, 2

Kunci pertama dan ukuran strawberry umap2, 4

Peta tidak teratur. Perhatikan bahwa panjang peta ditambah jika perlu. Tipe data harus sama.

Kelas dan Objek Instansinya

Nilai adalah tipe data, sebagai objek instantiated adalah kelas. Konstruksi peta yang tidak berurutan juga dapat menerima kelas sebagai tipe data. Program berikut menggambarkan hal ini:

#termasuk
#termasuk
menggunakan namespace std;

kelas TheCla
{
publik:
ke dalampada satu;
statis arangch;

ruang kosongfungsi(arangtidak, konstan arang *P)
{
biaya<< 'Ada ' <<pada satu<< 'buku berharga' <<tidak<<P<< ' di dalam toko.' << ' ';
}
statis ruang kosongseru(arangch)
{
jika (ch== 'ke')
biaya<< 'Fungsi anggota statis resmi' << ' ';
}
};

ke dalamutama()
{
TheCla obj1;TheCla obj2;TheCla obj3;TheCla obj4;TheCla obj5;

unordered_map<konstan arang*,TheCla>umap;
umap= {{'pisang',obj1}, {'anggur',obj2}, {'ara',obj3}, {'stroberi',obj4}, {'jeruk nipis',obj5}};

biaya<<umap.ukuran() << ' ';

kembali 0;
}

Keluarannya adalah: 5.

Definisi kelas memiliki dua data anggota publik dan dua fungsi anggota publik. Dalam fungsi main(), objek yang berbeda untuk kelas dibuat instance-nya. Peta yang tidak berurutan kemudian diinstansiasi, di mana setiap pasangan terdiri dari nama buah dan objek dari kelas. Ukuran peta ditampilkan. Program mengkompilasi tanpa peringatan atau pesan kesalahan.

Aplikasi Peta

Array mengaitkan indeks dengan nilai. Pasangan kunci/nilai ada dalam banyak situasi dalam kehidupan, yang dapat diprogram. Pasangan kunci/nilai buah/warna hanyalah salah satu contoh. Contoh lain adalah nama orang dan usia mereka. Dalam hal ini, pasangan akan menjadi tipe, pasangan. Bisa juga berpasangan. Dalam kasus terakhir, arahan pra-pemrosesan akan digunakan. Pasangan kunci/nilai masih bisa menjadi nama pasangan yang sudah menikah. Di negara-negara di mana ada poligami, akan ada istri yang berbeda untuk satu pria.

Pembentukan Peta

Peta bukanlah larik dua dimensi, dengan dua kolom. Peta bekerja dengan fungsi hash. Kuncinya dikodekan oleh fungsi hash, menjadi bilangan bulat dari sebuah array. Array inilah yang menyimpan nilai. Jadi, sebenarnya ada satu larik dengan nilai, dan kunci dipetakan ke indeks larik, sehingga korespondensi antara kunci dan nilai dibuat. Hashing adalah topik yang luas dan tidak tercakup dalam artikel ini.

Kesimpulan

Peta, juga dikenal sebagai array asosiatif adalah daftar elemen, di mana setiap elemen adalah pasangan kunci/nilai. Jadi, setiap kunci sesuai dengan nilai. Dalam C++, peta diimplementasikan sebagai struktur data dengan fungsi anggota dan operator. Peta terurut adalah peta di mana pasangan elemen telah diurutkan berdasarkan kunci. Peta yang tidak berurutan adalah peta yang tidak memiliki urutan.

Secara teknis, hash terdiri dari elemen pasangan. Faktanya, pasangan adalah keseluruhan struktur data dengan fungsi dan operator anggotanya. Dua parameter template untuk pasangan adalah dua parameter template yang sama untuk unordered_map.

initializer_list untuk peta adalah literal array dari literal. Setiap literal internal terdiri dari dua objek, pasangan kunci/nilai.

Fungsi anggota dan operator untuk unordered_map dapat dikategorikan di bawah judul berikut: konstruksi unordered_map/konstruksi salinan, Kapasitas unordered_map, iterator peta_unorder, Operasi peta_tidakterurut, dan Pengubah peta_tidakterurut.

Peta tidak berurutan digunakan ketika kunci harus dipetakan ke suatu nilai.

Chrys