从 unordered_map 获取键和值列表

新手上路,请多包涵

unordered_map 获取键和值的列表(作为 vector )的最有效方法是什么?

具体而言,假设有问题的地图是 unordered_map<string, double> 。然后,我想获得 --- 的密钥,以及 vector<string> vector<double> 值。

 unordered_map<string, double> um;

vector<string> vs = um.enum_keys();
vector<double> vd = um.enum_values();

我可以遍历地图并收集结果,但有没有更有效的方法?有一个也适用于常规地图的方法会很好,因为我可能会切换到那个。

原文由 Faheem Mitha 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.3k
2 个回答

好的,给你:

 std::vector<Key> keys;
keys.reserve(map.size());
std::vector<Val> vals;
vals.reserve(map.size());

for(auto kv : map) {
    keys.push_back(kv.first);
    vals.push_back(kv.second);
}

效率可能会提高,但确实如此。不过,您在两个容器上进行操作,因此实际上没有任何 STL 魔法可以隐藏这一事实。

正如路易斯所说,这将适用于任何 STL mapset 容器。

原文由 Keith Layne 发布,翻译遵循 CC BY-SA 3.0 许可协议

我将它与 range-v3 库一起使用,它也将很快出现在 STL 库中,在 c++23 中有点运气(范围::绝对和视图::键可能)。

 std::unordered_map<std::string, int> map {{"one", 1}, {"two", 2}, {"three", 3}};

auto keys = map | ranges::views::keys | ranges::to<std::vector>();

原文由 Silver Zachara 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题