Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya Boleh Isih std::map mengikut Nilai Daripada Kunci?

Bagaimanakah saya Boleh Isih std::map mengikut Nilai Daripada Kunci?

DDD
Lepaskan: 2024-12-25 05:22:13
asal
350 orang telah melayarinya

How Can I Sort an std::map by Value Instead of Key?

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

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan