Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya Boleh Isih std::map mengikut Nilai Daripada Kunci?
Mengisih std::peta mengikut Nilai
Mengisih std::peta mengikut nilai dan bukannya kunci boleh menjadi lebih kompleks daripada mengisih mengikut kunci. Berikut ialah analisis mendalam tentang isu dan penyelesaian:
Penyelesaian 1: Menggunakan Multimap
Untuk mengisih std::map mengikut nilai, kita boleh mencipta multimap dengan nilai sebagai kunci dan kunci sebagai nilai. Ini membolehkan kami mengisih mengikut nilai, seperti dalam contoh berikut:
template<typename A, typename B> std::multimap<B,A> flip_map(const std::map<A,B> &src) { std::multimap<B,A> dst; std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), flip_pair<A,B>); return dst; }
Dengan mengulangi peta asal dan memasukkan pasangan terbalik ke dalam multimap, kita pada asasnya menyongsangkan hubungan nilai kunci dan kemudian boleh susun mengikut kekunci baharu (nilai asal).
Penyelesaian 2: Sumber Bersekutu Generik (C 11 Diperlukan)
Untuk bekas bersekutu alternatif (cth., std::unordered_map), kita boleh menggunakan penyelesaian generik berikut:
template<typename A, typename B, template<class,class,class...> class M, class... Args> std::multimap<B,A> flip_map(const M<A,B,Args...>& src) { std::multimap<B,A> dst; std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), flip_pair<A,B>); return dst; }
Lebihan ini berfungsi untuk kedua-dua std::map dan std::unordered_map dengan menggunakan templat variadic untuk mengendalikan jenis bekas bersekutu yang berbeza.
Atas ialah kandungan terperinci Bagaimanakah saya Boleh Isih std::map mengikut Nilai Daripada Kunci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!