首頁 >後端開發 >C++ >如何按值而不是鍵對 std::map 進行排序?

如何按值而不是鍵對 std::map 進行排序?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-05 10:33:10673瀏覽

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

按值對std::map 進行排序

按值對std::map 進行排序需要使用標準sort() 函數的替代方法僅按鍵對元素進行排序。要實現此目的,請考慮以下解決方案:

翻轉鍵和值

使用以下命令創建一個新的多重映射,翻轉原始映射的鍵和值對函數:

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

用法:

建立原始地圖後(例如,std::map src),只需將地圖翻轉到按值排序:

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

通用關聯來源

此解決方案可以推廣到使用可變參數模板與任何關聯容器一起使用:

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

這適用於std::map 和std::unordered_map作為源翻蓋的。

以上是如何按值而不是鍵對 std::map 進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn