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
Mary-Kate Olsenasal
2024-12-05 10:33:10674semak imbas

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

Penggunaan:

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

std::multimap<double, int> dst = flip_map(src);

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

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:
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