我有要转换为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>> dict1
或map
与上面类似。向量将具有val1,val2,val3
。如何使用val3
对这张无序地图进行排序?
答案 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]; });