C ++

Cara menggunakan Peta Tidak Beratur C ++

Cara menggunakan Peta Tidak Beratur C ++
Peta, juga dikenali sebagai susunan asosiatif adalah senarai elemen, di mana setiap elemen adalah pasangan kunci / nilai. Jadi, setiap kunci sepadan dengan nilai. Kekunci yang berbeza boleh mempunyai nilai yang sama, untuk kerja biasa. Sebagai contoh, kunci boleh menjadi senarai buah-buahan dan nilai yang sesuai, warna buah-buahan. Dalam C ++, peta diimplementasikan sebagai struktur data dengan fungsi dan operator anggota. Peta yang dipesan adalah peta di mana pasangan elemen telah dipesan oleh kunci. Peta yang tidak tersusun adalah peta yang tidak mempunyai pesanan. Artikel ini menerangkan cara menggunakan peta tanpa susunan C ++, ditulis sebagai peta tidak teratur. Anda memerlukan pengetahuan dalam petunjuk C ++ untuk memahami artikel ini. unordered_map adalah sebahagian daripada pustaka standard C ++.

Kelas dan Objek

Kelas adalah sekumpulan pemboleh ubah dan fungsi yang berfungsi bersama, di mana pemboleh ubah tidak mempunyai nilai yang ditetapkan. Apabila nilai diberikan kepada pemboleh ubah, kelas menjadi objek. Nilai yang berbeza yang diberikan kepada kelas yang sama menghasilkan objek yang berbeza; iaitu, objek yang berbeza adalah kelas yang sama dengan nilai yang berbeza. Membuat objek dari kelas dikatakan sebagai objek.

Nama, unordered_map, adalah kelas. Objek yang dibuat dari kelas unordered_map mempunyai nama yang dipilih pengaturcara.

Fungsi yang tergolong dalam kelas diperlukan untuk membuat objek dari kelas. Dalam C ++, fungsi itu mempunyai nama yang sama dengan nama kelas. Objek yang dibuat (disusun) dari kelas mempunyai nama yang berbeza yang diberikan kepada mereka, oleh pengaturcara.

Membuat objek dari kelas bermaksud membina objek; ia juga bermaksud memberi contoh.

Program C ++ yang menggunakan kelas unordered_map, bermula dengan baris berikut di bahagian atas fail:

#sertakan
#sertakan
menggunakan ruang nama std;

Baris pertama adalah untuk input / output. Baris kedua adalah membenarkan program menggunakan semua ciri kelas unordered_map. Baris ketiga membolehkan program menggunakan nama di ruang nama standard.

Melebihi Fungsi

Apabila dua atau lebih tandatangan fungsi yang berbeza mempunyai nama yang sama, nama itu dikatakan berlebihan. Apabila satu fungsi dipanggil, jumlah dan jenis argumen, tentukan fungsi mana yang sebenarnya dijalankan.

Pembinaan / Salinan Pembinaan

Pembinaan Ringkas

Peta yang tidak tersusun dapat dibina dan diberi nilai seperti berikut:

peta_teraturan umap;
umap ["pisang"] = "kuning";
umap ["anggur"] = "hijau";
umap ["fig"] = "ungu";

Deklarasi dimulakan dengan pengkhususan templat dengan jenis untuk pasangan kunci dan nilai. Ini diikuti dengan nama pilihan pengaturcara untuk peta; kemudian titik koma. Segmen kod kedua menunjukkan cara menetapkan nilai pada kunci mereka.
Pembinaan oleh Initializer_list
Ini boleh dilakukan seperti berikut:

peta_teraturan umap ("pisang", "kuning",
"anggur", "hijau", "gambar", "ungu");

Pembinaan dengan menetapkan Initializer_list
Contoh:

peta_teraturan umap = "pisang", "kuning",
"anggur", "hijau", "gambar", "ungu";

Pembinaan dengan menyalin peta_ yang tidak tersusun
Contoh:

peta_teraturan umap1 ("pisang", "kuning",
"anggur", "hijau", "gambar", "ungu");
peta_teraturan umap2 (umap1);

Pasangan itu Unsur

Kod berikut menunjukkan cara membuat dan mengakses elemen pasangan:

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

Keluarannya adalah:

d
laut

pertama dan kedua adalah perkataan yang dikhaskan untuk dua item dalam pasangan. Nilai dalam pasangan masih boleh diubah menggunakan pertama dan kedua.

Sepasang dipanggil, value_type dalam topik peta yang tidak disusun.

Unsured_map Akses Elemen

pemetaan_jenis & operator [] (jenis_kunci && k)
Mengembalikan nilai untuk kekunci yang sepadan. Contoh:

peta_teraturan umap;
umap ["pisang"] = "kuning";
umap ["anggur"] = "hijau";
umap ["fig"] = "ungu";
const char * ret = umap ["anggur"];
cout << ret <<'\n';

Keluarannya adalah: "hijau". Nilai boleh diberikan dengan cara yang sama - lihat di atas.

Kapasiti yang tidak teratur

size_type size () const kecuali
Mengembalikan bilangan pasangan dalam peta.

peta_teraturan umap;
umap ["pisang"] = "kuning";
umap ["anggur"] = "hijau";
umap ["fig"] = "ungu";
cout << umap.size() <<'\n';

Keluaran adalah 3.

bool kosong () const kecuali

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

peta_teraturan umap;
cout << umap.empty() <<'\n';

Keluaran adalah 1.

Kembali Iterator dan Kelas peta tanpa susunan

Iterator adalah seperti penunjuk tetapi mempunyai lebih banyak fungsi daripada penunjuk.

bermula () kecuali

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

peta_teraturan umap;
umap ["pisang"] = "kuning"; umap ["anggur"] = "hijau"; umap ["fig"] = "ungu";
peta_teraturan:: iterator iter = umap.bermula ();
berpasangan pr = * iter;
cout << pr.first << ", " << pr.second << '\n';

Hasilnya ialah: ara, ungu. Peta tidak tersusun.

bermula () const kecuali;

Mengembalikan iterator yang menunjukkan elemen pertama dari koleksi objek peta. Ketika konstruksi objek didahului oleh const, ungkapan "begin () const" dijalankan dan bukannya "begin ()". Dalam keadaan ini, elemen dalam objek tidak dapat diubah. Contohnya digunakan dalam kod berikut.

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

Hasilnya ialah: ara, ungu. Peta tidak tersusun. Perhatikan bahawa const_iterator telah digunakan kali ini, bukan hanya iterator, untuk menerima iterator yang dikembalikan.

akhir () kecuali

Mengembalikan iterator yang menunjukkan tepat di luar elemen terakhir objek peta.

akhir () const kecuali

Mengembalikan iterator yang menunjukkan tepat di luar elemen terakhir objek peta. Apabila pembinaan objek peta didahului oleh const, ungkapan "end () const" dijalankan bukan "end ()".

unordered_map Operasi

cari iterator (const key_type & k)

Mencari sepasang kunci yang diberikan dalam peta. Sekiranya dijumpai, ia mengembalikan iterator. Sekiranya tidak dijumpai, ia mengembalikan iterator yang menunjuk ke hujung peta, yang bukan pasangan. Kod berikut menunjukkan cara menggunakan fungsi anggota ini:

peta_teraturan umap;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
peta_teraturan:: iterator iter = umap.cari ('c');
sekiranya (umap.cari ('c') != umap.akhir ())

berpasangan pr = * iter;
cout << pr.first << ", " << pr.second << '\n';

Keluarannya adalah: c, d

const_iterator find (const key_type & k) const;

Versi fungsi ini dipanggil, jika penciptaan peta yang tidak disusun bermula dengan const, menjadikan semua elemen peta hanya dapat dibaca.

pengubah tak teratur_map

berpasangan masukkan (nilai_jenis && obj)
Peta yang tidak tersusun bermaksud pasangan tidak mengikut urutan. Oleh itu, program memasukkan pasangan di mana-mana tempat yang difikirkan sesuai. Fungsi kembali, berpasangan. Sekiranya penyisipan berjaya, bool akan menjadi 1 untuk true, jika tidak, itu adalah 0 untuk false. Sekiranya penyisipan berjaya, maka iterator akan menunjukkan elemen yang baru dimasukkan. Kod berikut menggambarkan penggunaan:

peta_teraturan umap;
umap ["pisang"] = "kuning";
umap ["anggur"] = "hijau";
umap ["fig"] = "ungu";
umap.masukkan ("cherry", "red", "strawberry", "red");
cout << umap.size() << '\n';

Keluarannya adalah: 5. Lebih daripada satu pasangan boleh dimasukkan.

size_type delete (const key_type & k)

Fungsi ini menghapus sepasang dari peta yang tidak disusun. Segmen kod berikut menggambarkan:

peta_teraturan umap;
umap ["pisang"] = "kuning";
umap ["anggur"] = "hijau";
umap ["fig"] = "ungu";
int num = umap.padam ("anggur");
cout << umap.size() << '\n';

Keluaran adalah 2.
pertukaran kosong (tidak teratur_map &)
Dua peta yang tidak tersusun dapat ditukar, seperti yang digambarkan dalam segmen kod ini:

peta_teraturan umap1 = "pisang", "kuning",
"anggur", "hijau", "ara", "ungu", "strawberi", "merah";
peta_teraturan umap2 = "ceri", "merah", "limau", "hijau";
umap1.pertukaran (umap2);
peta_teraturan:: iterator iter1 = umap1.bermula ();
berpasangan pr1 = * iter1;
peta_teraturan:: iterator iter2 = umap2.bermula ();
berpasangan 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';
peta_teraturan umap1 = "pisang", "kuning",
"anggur", "hijau", "ara", "ungu", "strawberi", "merah";
peta_teraturan umap2 = "ceri", "merah", "limau", "hijau";
umap1.pertukaran (umap2);
peta_teraturan:: iterator iter1 = umap1.bermula ();
berpasangan pr1 = * iter1;
peta_teraturan:: iterator iter2 = umap2.bermula ();
berpasangan 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';

Keluarannya adalah:

Kunci pertama dan ukuran umap1: kapur, 2

Kunci dan saiz pertama strawberry umap2, 4

Peta tidak tersusun. Perhatikan bahawa panjang peta ditingkatkan jika perlu. Jenis data mestilah sama.

Kelas dan Objek Instantinya

Nilai adalah untuk jenis data, seperti objek instantiated ke kelas. Pembinaan peta yang tidak tersusun juga dapat menerima kelas sebagai jenis data. Program berikut menggambarkan ini:

#sertakan
#sertakan
menggunakan ruang nama std;
kelas TheCla

awam:
int int;
char statik;
kekosongan kosong (char cha, const char * str)

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

keseronokan kekosongan statik (char ch)

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

;
int utama ()

TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
peta_teraturan umap;
umap = "pisang", obj1, "anggur", obj2, "fig", obj3, "strawberry", obj4, "limau", obj5;
cout << umap.size() << '\n';
pulangan 0;

Keluarannya adalah: 5.

Definisi kelas mempunyai dua data anggota awam dan dua fungsi anggota awam. Dalam fungsi utama (), objek yang berbeza untuk kelas dibuat. Peta yang tidak tersusun kemudian dibuat, di mana setiap pasangan terdiri daripada nama buah dan objek dari kelas. Ukuran peta dipaparkan. Program ini disusun tanpa peringatan atau mesej ralat.

Aplikasi Peta

Array mengaitkan indeks ke nilai. Pasangan kunci / nilai terdapat dalam banyak situasi dalam kehidupan, yang dapat diprogramkan. Pasangan kunci / nilai buah / warna hanyalah satu contoh. Contoh lain ialah nama orang dan usia mereka. Dalam kes ini, pasangan akan terdiri daripada jenis, pasangan. Ia juga boleh berpasangan. Dalam kes terakhir, arahan pra-pemprosesan akan digunakan. Pasangan kunci / nilai masih boleh menjadi nama pasangan yang sudah berkahwin. Di negara-negara di mana terdapat poligami, akan ada isteri yang berbeza untuk satu lelaki.

Pembentukan Peta

Peta bukan tatasusunan dua dimensi, dengan dua lajur. Peta berfungsi dengan fungsi hash. Kunci dikodkan oleh fungsi hash, menjadi integer array. Susunan inilah yang menyimpan nilai. Jadi, sebenarnya ada satu array dengan nilai, dan kunci dipetakan ke indeks array, dan persamaan antara kunci dan nilai dibuat. Hashing adalah topik yang luas dan tidak dibahas dalam artikel ini.

Kesimpulannya

Peta, juga dikenali sebagai susunan asosiatif adalah senarai elemen, di mana setiap elemen adalah pasangan kunci / nilai. Jadi, setiap kunci sepadan dengan nilai. Dalam C ++, peta diimplementasikan sebagai struktur data dengan fungsi dan operator anggota. Peta yang dipesan adalah peta di mana pasangan elemen telah dipesan oleh kunci. Peta yang tidak tersusun adalah peta yang tidak mempunyai pesanan.

Secara teknikal, hash terdiri daripada pasangan unsur. Sebenarnya, pasangan ini adalah struktur data keseluruhan dengan fungsi dan pengendali anggotanya. Kedua-dua parameter templat untuk pasangan adalah dua parameter templat yang sama untuk peta yang tidak disusun.

Initializer_list untuk peta adalah susunan literal literal. Setiap literal dalaman terdiri daripada dua objek, pasangan kunci / nilai.

Fungsi anggota dan pengendali untuk unordered_map dapat dikategorikan di bawah tajuk berikut: unordered_map konstruksi / copy copy, unordered_map Capacity, unordered_map iterator, unordered_map Operations, and unordered_map Modifiers.

Peta tidak tersusun digunakan apabila kunci harus dipetakan ke nilai.

Chrys

5 Kad Tangkap Permainan Teratas
Kita semua telah melihat dan menyukai streaming permainan permainan di YouTube. PewDiePie, Jakesepticye, dan Markiplier hanyalah beberapa pemain terat...
Cara Membangunkan Permainan di Linux
Satu dekad yang lalu, tidak banyak pengguna Linux akan meramalkan bahawa sistem operasi kegemaran mereka suatu hari nanti akan menjadi platform permai...
Port Sumber Terbuka Mesin Permainan Komersial
Rekreasi enjin permainan sumber terbuka dan bebas platform boleh digunakan untuk bermain lama dan juga beberapa tajuk permainan yang baru-baru ini. Ar...