Rumah > pembangunan bahagian belakang > C++ > Bagaimana Saya Boleh Isih std::map mengikut Nilai, Bukan Kunci?

Bagaimana Saya Boleh Isih std::map mengikut Nilai, Bukan Kunci?

Mary-Kate Olsen
Lepaskan: 2024-12-05 10:33:10
asal
705 orang telah melayarinya

How Can I Sort a std::map by Value, Not Key?

Isih std::peta mengikut Nilai

Isih std::peta mengikut nilai memerlukan pendekatan alternatif sebagai fungsi sort() standard hanya menyusun elemen mengikut kunci. Untuk mencapai matlamat ini, pertimbangkan penyelesaian berikut:

Flip Key and Value

Buat multimap baharu yang menterbalikkan pasangan kunci dan nilai peta asal menggunakan fungsi 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;
}
Salin selepas log masuk

Penggunaan:

Selepas mencipta peta asal (cth., std::map src), cuma selak peta untuk mengisih mengikut nilai:

std::multimap<double, int> dst = flip_map(src);
Salin selepas log masuk

Sumber Bersekutu Generik

Penyelesaian ini boleh digeneralisasikan untuk berfungsi dengan mana-mana bekas bersekutu menggunakan variadic templat:

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;
}
Salin selepas log masuk

Ini berfungsi untuk kedua-dua std::map dan std::unordered_map sebagai sumber flip.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Isih std::map mengikut Nilai, Bukan Kunci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan