問題:如何根據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中文網其他相關文章!