首頁 >後端開發 >C++ >如何按值對 std::map 進行有效排序?

如何按值對 std::map 進行有效排序?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-26 10:33:14331瀏覽

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

如何按值對std::map 進行排序

按值而不是鍵對std::map 進行排序可能具有挑戰性。一種常見的解決方案是建立一個臨時多重映射來翻轉鍵值對並對其進行排序。然而,有一些替代技術可以提供更簡潔、更通用的方法。

翻轉鍵值對

以下程式碼片段示範如何翻轉鍵值對在std::map 中建立一個按值排序的新多重映射:

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

透過在原始上呼叫Flip_map std::map,您可以獲得按值排序的多重映射。

通用關聯來源

這種方法可以推廣到使用可變參數模板翻轉任何類型的關聯容器:

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

此通用重載適用於任何支援std::transform 的關聯容器演算法,包括std::map 和std::unordered_map。

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

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