C++按值对unordered_map或地图进行排序

C++ sorting unordered_map or map by value

本文关键字:地图 排序 map unordered C++      更新时间:2023-10-16

我有python代码,我正在尝试将其转换为C++等效代码。

dict1 = {i:(val1,val2,val3)} 
dict_sorted = sorted(dict1.items(), key=lambda kv: kv[1][2])

这将按val3对字典dict1进行排序,并存储在dict_sorted(不是字典(中。

在 c++ 中,我有 std::unordered_map<int, std::vector<double>> dict1 或与上面类似的map。矢量将有val1,val2,val3.如何使用val3对这个无序地图进行排序?

正如我在评论中指出的,Python 代码正在对 2 tuple s 进行排序list,根据每个tuple中第二个元素的第三个元素进行排序(结果不是dict(。对于等效的C++代码,您将dict替换为std::unordered_maplist替换为std::vector,并将两个tuple替换为std::pair;为了精确匹配 Python 的sorted结果,您需要使用 std::stable_sort 进行排序。

所以像这样(其中dict1是你的unordered_map(:

using kv_pair = std::pair<int, std::vector<double>>;
std::vector<kv_pair> dict_sorted;
dict_sorted.reserve(dict1.size());
for (const auto& kv : dict1) {
    dict_sorted.emplace_back(kv.first, kv.second);
}
std::stable_sort(std::begin(dict_sorted), std::end(dict_sorted),
                 [](const kv_pair& a, const kv_pair& b) { return a.second[2] < b.second[2]; });