Rumah >pembangunan bahagian belakang >C++ >Program C++ untuk mengisih kamus mengikut nilai
Terdapat beberapa struktur data yang dipanggil kamus tersedia dalam pelbagai bahasa komputer. Satu bentuk khas struktur data yang lebih pantas yang menyimpan data mengikut kunci dan nilai ialah kamus. Ia menyimpan pasangan nilai kunci di sana supaya komponen tertentu boleh dicari dengan cepat menggunakan kunci, hampir dalam masa nyata. Struktur data seperti kamus disertakan dalam standard bahasa C++ STL. Struktur data ini dipanggil "map". map menjana pasangan kunci dan nilai apa-apa jenis (jenis mesti ditakrifkan sebelum penyusunan kerana kami menggunakan C++). Dalam bahagian ini, kita akan melihat cara mengisih entri kamus berdasarkan nilainya menggunakan C++.
Mari kita lihat dahulu cara struktur data peta ditakrifkan. Dua daripada templat dalaman ini diperlukan. Pustaka dan sintaks yang diperlukan ditunjukkan di bawah -
#include <map> map<type1, type2> mapVariable;
Untuk menggunakan struktur data peta dalam contoh ini, kita perlu mengimport pustaka "map". Ini memerlukan data jenis 1 dan 2. Jenis1 mewakili jenis data parameter utama, manakala jenis2 mewakili jenis nilai. Objek yang diperoleh daripada kelas jenis peta dipanggil mapVariable. Sekarang mari kita periksa cara menyusun peta anda berdasarkan faktor utama ini.
Dalam idea ini, kami hanya mencipta vektor pasangan nilai kunci (tatasusunan dinamik, iaitu elemen lain yang diperoleh daripada C++ STL). Kemudian susun dengan mencipta fungsi perbandingan. Kandungan kemudiannya disimpan dalam peta sekali lagi dalam format yang disusun.
Ambil peta M sebagai input
Tentukan tatasusunan dinamik A untuk menyimpan pasangan nilai kunci
Untuk setiap pasangan nilai kunci p dalam M, laksanakan
masukkan p ke dalam A
Tamat
Isih A mengikut kekunci mereka
Buat peta kosong newMap
Untuk setiap pasangan p dalam A -
akan memasukkan newMap
Tamat
Kembali ke peta baharu
#include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; // Create a comparator function to perform key-value pair comparison bool compare ( pair <string, int> &a, pair <string, int> &b ){ return a.second < b.second; } //Define sorting function to sort given dictionary or map map <string, int> sorting( map <string, int> givenMap ){ vector<pair <string, int> > pairVec; map<string, int> newMap; for ( auto& it : givenMap ) { pairVec.push_back( it ); } sort( pairVec.begin(), pairVec.end(), compare); for ( auto& it : pairVec ) { cout << "Key: " << it.first << ", value: " << it.second << endl; newMap.insert( {it.first, it.second } ); } return newMap; } 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 = { { "Three", 3 }, { "Two", 2 }, { "Four", 4 }, { "One", 1 }, { "Five", 5 } }; cout << "Before Sorting: " << endl; display( givenMap ); cout << "After Sorting: " << endl; givenMap = sorting( givenMap ); }
Before Sorting: Key: Five, value: 5 Key: Four, value: 4 Key: One, value: 1 Key: Three, value: 3 Key: Two, value: 2 After Sorting: Key: One, value: 1 Key: Two, value: 2 Key: Three, value: 3 Key: Four, value: 4 Key: Five, value: 5
Kami telah mengisih, dan jika kami menyimpan hasil akhir dalam peta, kami tidak akan melihat sebarang perbezaan sebelum dan selepas mengisih, ini kerana struktur data peta menyimpan data dalam bentuk yang diisih mengikut kekunci pada kebanyakan masa. Di sini kami menggunakan vektor untuk mengisih berdasarkan nilai. Pesanan boleh didapati jika kami mencetaknya terus dari vektor.
Anda boleh menggunakan jenis struktur data lain, satu set, untuk mengisih pasangan nilai kunci dalam struktur data yang dipetakan. Data disimpan teratur dalam struktur data pengumpulan. Oleh itu, selepas menambah elemen pada koleksi, tidak perlu mengisih lagi. Untuk pemahaman yang lebih baik, mari lihat algoritma.
Ambil peta M sebagai input
Tentukan koleksi S untuk menyimpan pasangan nilai kunci
Untuk setiap pasangan nilai kunci p dalam M, laksanakan
Masukkan p ke dalam S
Tamat
Buat peta kosong newMap
Untuk setiap pasangan p -
dalam Sakan memasukkan newMap
Tamat
Kembali ke peta baharu
#include <iostream> #include <set> #include <map> #include <algorithm> using namespace std; // Create a comparator function to perform key-value pair comparison struct compare { template <typename T> bool operator()(const T& a, const T& b) const { if (a.second != b.second) { return a.second < b.second; } return a.first < b.first; } }; //Define sorting function to sort given dictionary or map map <string, int> sorting( map <string, int> givenMap ){ set<pair <string, int>, compare> pairSet( givenMap.begin(), givenMap.end() ); map<string, int> newMap; for ( auto& it : givenMap ) { pairSet.insert( it ); } for ( auto& it : pairSet ) { cout << "Key: " << it.first << ", value: " << it.second << endl; newMap.insert( {it.first, it.second } ); } return newMap; } 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 = { { "Three", 3 }, { "Two", 2 }, { "Four", 4 }, { "One", 1 }, { "Five", 5 } }; cout << "Before Sorting: " << endl; display( givenMap ); cout << "After Sorting: " << endl; givenMap = sorting( givenMap ); }
Before Sorting: Key: Five, value: 5 Key: Four, value: 4 Key: One, value: 1 Key: Three, value: 3 Key: Two, value: 2 After Sorting: Key: One, value: 1 Key: Two, value: 2 Key: Three, value: 3 Key: Four, value: 4 Key: Five, value: 5
Dalam siaran ini, kami melihat dua cara berbeza untuk mengisih struktur data kamus (dipanggil peta dalam C++) dan mengisih mengikut nilai. Memandangkan peta ialah peta cincang, data kuncinya disimpan menggunakan algoritma cincang. Walaupun kunci berbeza, nilai untuk kunci yang berbeza mungkin sama. Kami menggunakan pengisihan set dan vektor, di mana kedua-dua vektor dan set membawa maklumat berpasangan, dan kami mengisihnya. Setiap pasangan boleh diisih dalam dua cara berbeza. Jenis nilai adalah jenis kedua dan jenis kunci adalah yang pertama.
Atas ialah kandungan terperinci Program C++ untuk mengisih kamus mengikut nilai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!