Cara menggunakan Peta Tidak Beratur C ++

How Use C Unordered Map



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 dilaksanakan 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 namespace std;

Baris pertama adalah untuk input / output. Baris kedua adalah membenarkan program menggunakan semua ciri kelas peta yang tidak disusun. 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, bilangan 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<penyambung char*, penyambung char*>umap;

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

Deklarasi bermula dengan pengkhususan templat dengan jenis untuk pasangan kunci dan nilai. Ini diikuti oleh nama programmer yang dipilih untuk peta; kemudian titik koma. Segmen kod kedua menunjukkan cara memberikan nilai pada kunci mereka.
Pembinaan oleh Initializer_list
Ini boleh dilakukan seperti berikut:

peta_teraturan<penyambung char*, penyambung char*>umap({{'pisang', 'kuning'},
{'anggur', 'hijau'}, {'buah ara', 'ungu'}});

Pembinaan dengan menetapkan Initializer_list
Contoh:

peta_teraturan<penyambung char*, penyambung char*>umap= {{'pisang', 'kuning'},
{'anggur', 'hijau'}, {'buah ara', 'ungu'}};

Pembinaan dengan menyalin peta_ yang tidak tersusun
Contoh:

peta_teraturan<penyambung char*, penyambung char*>umap1({{'pisang', 'kuning'},
{'anggur', 'hijau'}, {'buah ara', 'ungu'}});
peta_teraturan<penyambung char*, penyambung char*>umap2(umap1);

Elemen pasangan

Kod berikut menunjukkan cara membuat dan mengakses elemen pasangan:

berpasangan<char, penyambung char*>pr= {'d', 'menjadi'};
kos<<pr.pertama << ' n';
kos<<pr.kedua << ' n';

Keluarannya adalah:

d
menjadi

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<penyambung char*, penyambung char*>umap;

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

penyambung char *betul=umap['anggur'];

kos<<betul<<' n';

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

Kapasiti tidak teratur_map

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

peta_teraturan<penyambung char*, penyambung char*>umap;

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

kos<<umap.ukuran() <<' 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<penyambung char*, penyambung char*>umap;
kos<<umap.kosong() <<' n';

Keluaran adalah 1.

Mengembalikan Iterator dan Kelas peta tanpa susunan

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

mulakan () kecuali

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

peta_teraturan<penyambung char*, penyambung char*>umap;

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

peta_teraturan<penyambung char*, penyambung char*> ::iteratoriter=umap.bermula();
berpasangan<penyambung char*, penyambung char*>pr= *iter;
kos<<pr.pertama << ',' <<pr.kedua << ' n';

Hasilnya ialah: ara, ungu. Peta tidak tersusun.

bermula () const kecuali;

Mengembalikan iterator yang menunjukkan elemen pertama koleksi objek peta. Apabila pembinaan objek didahului oleh const, ekspresi mula () const dijalankan dan bukannya mula (). Dalam keadaan ini, elemen dalam objek tidak dapat diubah. Contohnya digunakan dalam kod berikut.

penyambungpeta_teraturan<penyambung char*, penyambung char*>umap({{'pisang', 'kuning'},
{'anggur', 'hijau'}, {'buah ara', 'ungu'}});

peta_teraturan<penyambung char*, penyambung char*> ::const_iteratoriter=umap.bermula();
berpasangan<penyambung char*, penyambung char*>pr= *iter;
kos<<pr.pertama << ',' <<pr.kedua << ' 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, ujung ekspresi () const dijalankan dan bukannya akhir ().

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<char,char>umap;

umap['ke'] = 'b';umap['c'] = 'd';umap['Dan'] = 'f';

peta_teraturan<char,char> ::iteratoriter=umap.cari('c');
sekiranya (umap.cari('c') ! =umap.akhir())
{
berpasangan<char,char>pr= *iter;
kos<<pr.pertama << ',' <<pr.kedua << ' n';
}

Keluarannya adalah: c, d

const_iterator find (const key_type & k) const;

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

pengubah tak teratur_map

sisipan pasangan (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<penyambung char*, penyambung char*>umap;

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

umap.masukkan({{'ceri', 'bersih'}, {'strawberi', 'bersih'}});

kos<<umap.ukuran() << ' 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<penyambung char*, penyambung char*>umap;

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

intpada satu=umap.padam('anggur');

kos<<umap.ukuran() << ' 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<penyambung char*, penyambung char*>umap1= {{'pisang', 'kuning'},
{'anggur', 'hijau'}, {'buah ara', 'ungu'}, {'strawberi', 'bersih'}};

peta_teraturan<penyambung char*, penyambung char*>umap2= {{'ceri', 'bersih'}, {'limau', 'hijau'}};

umap1.pertukaran(umap2);

peta_teraturan<penyambung char*, penyambung char*> ::iteratoriter1=umap1.bermula();
berpasangan<penyambung char*, penyambung char*>pr1= *iter1;
peta_teraturan<penyambung char*, penyambung char*> ::iteratoriter2=umap2.bermula();
berpasangan<penyambung char*, penyambung char*>pr2= *iter2;

kos<< 'Kunci dan ukuran umap1 pertama:'<<pr1.pertama <<','<<umap1.ukuran() << ' n';
kos<< 'Kunci dan ukuran umap2 pertama'<<pr2.pertama <<','<<umap2.ukuran() << ' n';
peta_teraturan<penyambung char*, penyambung char*>umap1= {{'pisang', 'kuning'},
{'anggur', 'hijau'}, {'buah ara', 'ungu'}, {'strawberi', 'bersih'}};
peta_teraturan<penyambung char*, penyambung char*>umap2= {{'ceri', 'bersih'}, {'limau', 'hijau'}};

umap1.pertukaran(umap2);

peta_teraturan<penyambung char*, penyambung char*> ::iteratoriter1=umap1.bermula();
berpasangan<penyambung char*, penyambung char*>pr1= *iter1;
peta_teraturan<penyambung char*, penyambung char*> ::iteratoriter2=umap2.bermula();
berpasangan<penyambung char*, penyambung char*>pr2= *iter2;

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

Keluarannya adalah:

Kunci dan ukuran pertama umap1: kapur, 2

Kunci dan ukuran pertama strawberry umap2, 4

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

Kelas dan Objeknya

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 namespace std;

kelas TheCla
{
awam:
intpada satu;
statik charch;

batalfungsi(chartidak, penyambung char *hlm)
{
kos<< 'Disana ada ' <<pada satu<< 'buku bernilai' <<tidak<<hlm<< 'di kedai.' << ' n';
}
statik batalseronok(charch)
{
sekiranya (ch== 'ke')
kos<< 'Fungsi anggota statik rasmi' << ' n';
}
};

intutama()
{
TheCla obj1;TheCla obj2;TheCla obj3;TheCla obj4;TheCla obj5;

peta_teraturan<penyambung char*,TheCla>umap;
umap= {{'pisang',obj1}, {'anggur',obj2}, {'buah ara',obj3}, {'strawberi',obj4}, {'limau',obj5}};

kos<<umap.ukuran() << ' n';

kembali 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 tidak tersusun kemudian dibuat, di mana setiap pasangan terdiri dari nama buah dan objek dari kelas. Ukuran peta dipaparkan. Program ini disusun tanpa peringatan atau mesej ralat.

Aplikasi Peta

Susunan mengaitkan indeks dengan nilai. Pasangan kunci / nilai ada 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 dilaksanakan 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 elemen pasangan. 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 construction / copy building, unordered_map Capacity, unordered_map iterator, unordered_map Operations, and unordered_map Modifiers.

Peta tidak tersusun digunakan apabila kunci harus dipetakan ke nilai.

Chrys