Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyusun std::map dengan cekap mengikut Nilai?

Bagaimana untuk Menyusun std::map dengan cekap mengikut Nilai?

Mary-Kate Olsen
Lepaskan: 2024-12-26 10:33:14
asal
297 orang telah melayarinya

How to Efficiently Sort a std::map by Value?

Cara Isih std::peta mengikut Nilai

Mengisih std::peta mengikut nilai dan bukannya kunci boleh mencabar. Satu penyelesaian biasa ialah mencipta multimap sementara yang membalikkan pasangan nilai kunci dan mengisihnya. Walau bagaimanapun, terdapat teknik alternatif yang boleh memberikan pendekatan yang lebih bersih dan serba boleh.

Membalikkan Pasangan

Coretan kod berikut menunjukkan cara membalikkan pasangan nilai kunci dalam std::map untuk mencipta multimap baharu yang diisih mengikut nilai:

template<typename A, typename B>
std::pair<B,A> flip_pair(const std::pair<A,B> &amp;p)
{
    return std::pair<B,A>(p.second, p.first);
}

template<typename A, typename B>
std::multimap<B,A> flip_map(const std::map<A,B> &amp;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

Dengan memanggil flip_map pada std::map asal, anda boleh mendapatkan multimap yang diisih mengikut nilai.

Sumber Bersekutu Generik

Pendekatan ini boleh digeneralisasikan untuk membalikkan bekas bersekutu mana-mana taip menggunakan templat variadic:

template<typename A, typename B, template<class,class,class...> class M, class... Args>
std::multimap<B,A> flip_map(const M<A,B,Args...> &amp;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

Lebihan generik ini berfungsi dengan mana-mana bekas bersekutu yang menyokong algoritma std::transform, termasuk std::map dan std::unordered_map.

Atas ialah kandungan terperinci Bagaimana untuk Menyusun std::map dengan cekap mengikut Nilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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