gpt4 book ai didi

c++ - 按 unordered_map 中的结构数据排序

转载 作者:行者123 更新时间:2023-12-01 23:08:09 25 4
gpt4 key购买 nike

我有一个 std::unordered_map<id, town_data> data ,其中 town_data 是 struct不同信息的集合 - 名称(字符串)、征收的税款(整数)和距首都的距离(整数)。我应该 build 一个 std::vector<id> ,按上述距离从低到高排序。我很难弄清楚如何有效地完成这项工作。我想我可以简单地遍历 data , 创建 std::map<distance, id>通过该循环/插入,按距离对其进行排序,除非默认情况下对 map 进行排序,然后将其逐键复制到新 vector ,std::vector<id> .但这种做法看起来确实很浪费。我在这里是否缺少一些捷径或更有效的解决方案?

最佳答案

您可以创建一个 std::vector迭代器到映射中,然后根据您的排序标准对迭代器进行排序。排序后,您可以将结果转换为 std::vector<id>。 .

创建一个 std::vector迭代器:

    std::vector<decltype(data)::iterator> its;
its.reserve(data.size());
for(auto it = data.begin(); it != data.end(); ++it)
its.push_back(it);

std::vector 进行排序:

#include <algorithm> // std::sort, std::transform

std::sort(its.begin(), its.end(),
[](auto& lhs, auto&rhs) {
return lhs->second.distance < rhs->second.distance;
});

最后,将其转换为 std::vector<id> :

#include <iterator> // std::back_inserter

std::vector<id> vec;
vec.reserve(its.size());
std::transform(its.begin(), its.end(), std::back_inserter(vec),
[](auto it) {
return it->first;
});

关于c++ - 按 unordered_map 中的结构数据排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70431146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com