C++

Cara menggunakan C++ Unordered Map

Cara menggunakan 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 dengan kunci. Peta yang tidak teratur adalah peta yang tidak memiliki urutan. 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. Di C++, fungsi itu memiliki nama yang sama dengan nama kelas. Objek yang dibuat (dicontohkan) 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-nama di 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 umap;
umap["pisang"] = "kuning";
umap["anggur"] = "hijau";
umap["gambar"] = "ungu";

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

unordered_map umap ("pisang", "kuning",
"anggur", "hijau", "ara", "ungu");

Konstruksi dengan menetapkan Initializer_list
Contoh:

unordered_map umap = "pisang", "kuning",
"anggur", "hijau", "ara", "ungu";

Konstruksi dengan menyalin unordered_map lain
Contoh:

unordered_map umap1 ("pisang", "kuning",
"anggur", "hijau", "ara", "ungu");
unordered_map umap2 (umap1);

Pasangan Elemen

Kode berikut menunjukkan cara membuat dan mengakses elemen pasangan:

pasangan pr = 'd', "laut";
cout << pr.first << '\n';
cout << pr.second << '\n';

Outputnya adalah:

d
laut

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 umap;
umap["pisang"] = "kuning";
umap["anggur"] = "hijau";
umap["gambar"] = "ungu";
const char *ret = umap["anggur"];
cout << ret <<'\n';

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 umap;
umap["pisang"] = "kuning";
umap["anggur"] = "hijau";
umap["gambar"] = "ungu";
cout << umap.size() <<'\n';

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 umap;
cout << umap.empty() <<'\n';

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 umap;
umap["pisang"] = "kuning"; umap["anggur"] = "hijau"; umap["gambar"] = "ungu";
unordered_map:: iterator iter = umap.mulai();
pasangan pr = * iter;
cout << pr.first << ", " << pr.second << '\n';

Outputnya adalah: ara, ungu. Peta tidak berurutan.

mulai() const nokecuali;

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

const unordered_map umap ("pisang", "kuning",
"anggur", "hijau", "ara", "ungu");
unordered_map::const_iterator iter = umap.mulai();
pasangan pr = * iter;
cout << pr.first << ", " << pr.second << '\n';

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 pasangan. Kode berikut menunjukkan cara menggunakan fungsi anggota ini:

unordered_map umap;
umap['a'] = 'b'; umap['c'] = 'd'; umap['e'] = 'f';
unordered_map:: iterator iter = umap.temukan('c');
jika (umap.temukan('c') != umap.akhir())

pasangan pr = *ter;
cout << pr.first << ", " << pr.second << '\n';

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

pasangan masukkan(nilai_tipe&& 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, pasangkan. 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 umap;
umap["pisang"] = "kuning";
umap["anggur"] = "hijau";
umap["gambar"] = "ungu";
umap.insert("ceri", "merah", "strawberry", "merah");
cout << umap.size() << '\n';

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

size_type hapus(const key_type& k)

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

unordered_map umap;
umap["pisang"] = "kuning";
umap["anggur"] = "hijau";
umap["gambar"] = "ungu";
int jumlah = umap.hapus("anggur");
cout << umap.size() << '\n';

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

unordered_map umap1 = "pisang", "kuning",
"anggur", "hijau", "ara", "ungu", "strawberry", "merah";
unordered_map umap2 = "ceri", "merah", "jeruk nipis", "hijau";
umap1.tukar (umap2);
unordered_map:: iterator iter1 = umap1.mulai();
pasangan pr1 = *iter1;
unordered_map::iterator iter2 = umap2.mulai();
pasangan pr2 = *iter2;
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
unordered_map umap1 = "pisang", "kuning",
"anggur", "hijau", "ara", "ungu", "strawberry", "merah";
unordered_map umap2 = "ceri", "merah", "jeruk nipis", "hijau";
umap1.tukar (umap2);
unordered_map:: iterator iter1 = umap1.mulai();
pasangan pr1 = *iter1;
unordered_map::iterator iter2 = umap2.mulai();
pasangan pr2 = *iter2;
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';

Outputnya adalah:

Kunci pertama dan ukuran umap1: kapur, 2

Kunci pertama dan ukuran strawberry umap2, 4

Peta tidak berurutan. Perhatikan bahwa panjang peta ditambah jika perlu. Tipe datanya harus sama.

Kelas dan Objek Instansinya

Nilai adalah untuk tipe data, karena objek yang dipakai adalah untuk 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:
int nomor;
karakter statis;
void func (char cha, const char *str)

cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';

static void fun (char ch)

jika (ch == 'a')
cout << "Official static member function" << '\n';

;
int utama()

Kla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
unordered_map umap;
umap = "pisang", obj1, "anggur", obj2, "fig", obj3, "strawberry", obj4, "lime", obj5;
cout << umap.size() << '\n';
kembali 0;

Outputnya adalah: 5.

Definisi kelas memiliki dua data anggota publik dan dua fungsi anggota publik. Dalam fungsi main(), objek yang berbeda untuk kelas diinstansiasi. 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 umurnya. Dalam hal ini, pasangan akan bertipe, 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 bukan larik dua dimensi, dengan dua kolom. Peta berfungsi dengan fungsi hash. Kuncinya dikodekan oleh fungsi hash, menjadi bilangan bulat dari array. Array inilah yang menyimpan nilai. Jadi, sebenarnya ada satu array dengan nilai, dan kunci dipetakan ke indeks array, 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 dengan kunci. Peta yang tidak teratur adalah peta yang tidak memiliki urutan.

Secara teknis, hash terdiri dari pasangan elemen. 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.

Inisialisasi_daftar 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, unordered_map Capacity, unordered_map iterator, Unordered_map Operations, dan unordered_map Modifiers.

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

Chrys

Cara Meningkatkan FPS di Linux?
FPS adalah singkatan dari Bingkai per detik. Tugas FPS adalah mengukur kecepatan bingkai dalam pemutaran video atau pertunjukan game. Dengan kata sede...
Game Lab Aplikasi Oculus Teratas
Jika Anda adalah pemilik headset Oculus maka Anda harus tahu tentang sideloading. Sideloading adalah proses menginstal konten non-toko di headset Anda...
10 Game Teratas untuk Dimainkan di Ubuntu
Platform Windows telah menjadi salah satu platform yang mendominasi untuk bermain game karena persentase besar dari game yang berkembang saat ini untu...