Rumah >pembangunan bahagian belakang >C++ >Program C++ untuk mengemas kini nilai kamus mengikut kunci
Banyak bahasa komputer menyediakan kamus, iaitu struktur data. Kamus ialah struktur data yang lebih pantas yang menyimpan data berdasarkan kunci dan nilai. Ia mengekalkan kombinasi nilai kunci supaya kunci boleh dicari dengan mudah untuk komponen tertentu dalam hampir masa nyata. Standard bahasa C++ STL termasuk struktur data seperti kamus. Istilah "map" digunakan untuk menerangkan struktur data ini. Peta ini mencipta sepasang kunci dan nilai apa-apa jenis (memandangkan kami menggunakan C++, jenis mesti ditakrifkan sebelum penyusunan). Bahagian ini menunjukkan cara mengemas kini nilai dalam peta atau kamus sedia ada dalam C++.
Mari kita lihat dulu definisi struktur data peta. Templat dalaman ini memerlukan dua jenis berbeza. Sintaks dan perpustakaan yang diperlukan ditunjukkan di bawah -
#include <map> map<type1, type2=""> mapVariable; </type1,></map>
Dalam kes ini, kita perlu mengimport perpustakaan "peta" untuk menggunakan struktur data peta. Jenis data 1 dan 2 diperlukan untuk ini. Jenis data parameter utama ialah jenis1, dan jenis data parameter nilai ialah jenis2. Di sini objek yang diperoleh daripada kelas jenis peta ialah mapVariable. Sekarang mari kita lihat cara mendapatkannya menggunakan pemetaan C++.
Dalam struktur data peta kita boleh meletakkan nilai ke dalam peta dengan mengakses kunci sedia ada atau kunci baharu. Oleh kerana kita bercakap tentang mengemas kini nilai di sini, kita perlu mengemas kini kunci sedia ada. Kekunci akan digunakan dalam kurungan segi empat sama seperti tatatanda indeks tatasusunan. Mari lihat sintaks ini -
mapVariable [<the key="" value="">] = <the new="" value="">; </the></the>
Mencipta kamus atau peta D
Sudah ada nilai kunci k
Nilai v
Kemas kini seperti D[ k ] = v
Kembali ke D
#include <iostream> #include <map> using namespace std; void display( map <string, int>& givenMap ){ for ( auto& it : givenMap ) { cout << "Key: " << it.first << ", value: " << it.second << endl; } } int main(){ map<string, int> givenMap; givenMap = { { "ABCD", 25 }, { "EFGH", 50 }, { "IJKL", 75 }, { "MNOP", 100 }, { "QRST", 125 } }; cout << "Before updation: " << endl; display( givenMap ); cout << "After Updation: " << endl; //update the value of MNOP to 500 givenMap[ "MNOP" ] = 500; display( givenMap ); }
Before updation: Key: ABCD, value: 25 Key: EFGH, value: 50 Key: IJKL, value: 75 Key: MNOP, value: 100 Key: QRST, value: 125 After Updation: Key: ABCD, value: 25 Key: EFGH, value: 50 Key: IJKL, value: 75 Key: MNOP, value: 500 Key: QRST, value: 125
Dalam kaedah ini, kami berjaya mengemas kini nilai dengan mengakses parameter utama. Walau bagaimanapun, proses ini mungkin tidak selalu tepat. Prosedur ini mempunyai kelemahan yang serius, iaitu kunci yang diberikan mungkin tidak wujud dalam peta. Tetapi dengan menggunakan proses ini ia akan memasukkan kunci baru dengan nilai yang diberikan. Jadi dalam kaedah seterusnya kita akan melihat cara mencari dan mengemas kini elemen selepas carian berjaya.
Anda boleh menggunakan fungsi find() dalam objek peta untuk menyemak sama ada kunci tertentu wujud dalam peta. Ia akan mengembalikan rujukan penuding kepada kunci, jika tidak, ia akan mengembalikan penuding "end()" ke peta, yang menunjukkan bahawa peta tidak mengandungi unsur di dalamnya. Mari kita lihat algoritma dan pelaksanaan untuk pemahaman yang lebih baik.
Mencipta kamus atau peta D
Sudah ada nilai kunci k
Nilai v
Buat objek iterator itr untuk mendapatkan penunjuk pasangan nilai kunci
Panggil kaedah find() untuk memasukkan kamus D ke dalam itr
Jika itr bukan penghujung D, yang bermaksud kunci itu wujud, maka
Masukkan v ke dalam itr
Tamat jika
#include <iostream> #include <map> using namespace std; void display( map <string, int>& givenMap ){ for ( auto& it : givenMap ) { cout << "Key: " << it.first << ", value: " << it.second << endl; } } void updateElement( map <string, int>& givenMap, string givenKey, int newValue ){ map <string, int>::iterator itr; itr = givenMap.find( givenKey ); if( itr != givenMap.end() ){ // when item has found itr->second = newValue; } } int main(){ map<string, int> givenMap; givenMap = { { "ABCD", 25 }, { "EFGH", 50 }, { "IJKL", 75 }, { "MNOP", 100 }, { "QRST", 125 } }; cout << "Before updation: " << endl; display( givenMap ); cout << "After Updation: " << endl; //update the value of MNOP to 500 updateElement( givenMap, "MNOP", 1580 ); display( givenMap ); }
Before updation: Key: ABCD, value: 25 Key: EFGH, value: 50 Key: IJKL, value: 75 Key: MNOP, value: 100 Key: QRST, value: 125 After Updation: Key: ABCD, value: 25 Key: EFGH, value: 50 Key: IJKL, value: 75 Key: MNOP, value: 1580 Key: QRST, value: 125
Dalam kaedah ini, fungsi updateElement mengambil sebagai input peta, kunci sedia ada dan newValue. Kemudian cari kunci itu. Hanya kemas kini nilai jika ia wujud, jika tidak, dapatkannya dari fungsi. Jadi dengan menggunakan kaedah ini kita tidak boleh membuat entri baharu dalam peta tetapi hanya boleh mengemas kini entri sedia ada.
Dalam artikel ini kami mempelajari cara mengemas kini elemen dalam peta menggunakan kekunci. Dalam kaedah pertama, kami menggunakan kaedah penugasan langsung, yang berjaya mengemas kini elemen, tetapi ia juga boleh menambah elemen baharu apabila kunci belum wujud lagi. Kaedah kedua menghapuskan masalah ini dengan melakukan carian mudah pada permulaan. Kadangkala kita mungkin perasan bahawa kaedah kedua mengambil masa tambahan untuk mencari kunci dan kemudian mengemas kininya. Oleh itu, ia memerlukan lebih banyak masa carian daripada kaedah pertama. Tetapi jika kita berfikir dengan teliti, dalam kaedah pertama, penemuan ini juga pada dasarnya direalisasikan. Memandangkan struktur data menggunakan teknik berasaskan cincang, ia akan berjalan dalam masa yang tetap (dalam kebanyakan kes).
Atas ialah kandungan terperinci Program C++ untuk mengemas kini nilai kamus mengikut kunci. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!