我有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对此无序映射进行排序
发布于 2019-06-12 09:34:17
作为I noted in the comments,Python代码生成一个由两个tuple组成的排序list,根据每个tuple中第二个元素的第三个元素进行排序(结果不是dict)。对于等效的C++代码,您可以用std::unordered_map替换dict,用std::vector替换list,用std::pair替换two-tuple;为了精确匹配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]; });https://stackoverflow.com/questions/56553458
复制相似问题