Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Program C++ untuk mengisih kamus mengikut nilai

Program C++ untuk mengisih kamus mengikut nilai

WBOY
WBOYke hadapan
2023-09-06 22:49:06984semak imbas

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 -

Sintaks untuk mentakrifkan struktur data peta

#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.

Gunakan Vektor Pasangan

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.

Algoritma

  • 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

    • ke dalam p
  • Tamat

  • Kembali ke peta baharu

Contoh

#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 ); 
}

Output

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.

Gunakan set sepasang

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.

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 S
    • akan memasukkan newMap

    • ke dalam p
  • Tamat

  • Kembali ke peta baharu

Contoh

#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 ); 
}

Output

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

Kesimpulan

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam