C ++按值排序unordered_map或map

时间:2019-06-12 01:18:17

标签: c++

我有要转换为C ++的python代码。

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

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

在c ++中,我有std::unordered_map<int, std::vector<double>> dict1map与上面类似。向量将具有val1,val2,val3。如何使用val3对这张无序地图进行排序?

1 个答案:

答案 0 :(得分:0)

I noted in the comments一样,Python代码正在对两个{list进行排序tuple,并基于每个tuple中第二个元素的第三个元素进行排序(结果不是dict)。对于等效的C ++代码,您将dict替换为std::unordered_map,将list替换为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]; });