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

如何在 C 中按值對 std::map 進行排序?

DDD
DDD原創
2024-11-30 19:01:121008瀏覽

How Can I Sort an std::map by Value in C  ?

按值對std::map 進行排序

問題:如何根據std::map 的值輕鬆對std::map 進行排序值?

答案

傳統方法(C 11 之前)

在引入C 11 之前,按值對映射進行排序需要將std::map 轉換為std::pair 的中間步驟。這涉及使用自訂排序函數並手動指定比較參數。

C 11 方法

隨著 C 11 的出現,出現了更簡潔的解決方案。以下程式碼片段示範如何操作:

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

此函數有效地翻轉映射中的鍵值對,允許您迭代排序的值。

通用關聯來源(C 11 以上)

為了獲得更大的靈活性,可以建立翻轉函數的通用版本,允許它可以與任何關聯容器一起使用:

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 一起使用。

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

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