首页 > 后端开发 > C++ > 如何有效地将 std::map 中的键和值提取到向量中?

如何有效地将 std::map 中的键和值提取到向量中?

Mary-Kate Olsen
发布: 2024-11-29 20:30:11
原创
531 人浏览过

How to Efficiently Extract Keys and Values from a std::map into Vectors?

从 std::map 检索键或值到 Vector

从 std::map 检索所有键或值到向量Vector 是一项常见任务,但 std::map 本身缺乏用于此目的的显式成员函数。一种方法涉及定义自定义函子,如提供的代码中所示:

struct RetrieveKey
{
    template <typename T>
    typename T::first_type operator()(T keyValuePair) const
    {
        return keyValuePair.first;
    }
};

map<int, int> m;
vector<int> keys;

// Retrieve all keys
transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey());

// Dump all keys
copy(keys.begin(), keys.end(), ostream_iterator<int>(cout, "\n"));
登录后复制

此解决方案操作地图外部的数据,这在某些情况下可能并不理想。另一种利用简单 for 循环的方法提供了更清晰、更明确的解决方案:

map<int, int> m;
vector<int> key, value;
for (auto it = m.begin(); it != m.end(); ++it) {
  key.push_back(it->first);
  value.push_back(it->second);
  cout << "Key: " << it->first << endl;
  cout << "Value: " << it->second << endl;
}
登录后复制

通过以这种方式迭代映射,我们可以将键和值直接提取到向量容器中。

另一个选项,如果使用 Boost 库,可以进一步简化过程:

map<int,int> m;
pair<int,int> me; // what a map<int, int> is made of
vector<int> v;
BOOST_FOREACH(me, m) {
  v.push_back(me.first);
  cout << me.first << "\n";
}
登录后复制

这个版本简洁、可读,并且提供对检索过程的明确控制。选择最合适的方法取决于开发者的具体需求和偏好。

以上是如何有效地将 std::map 中的键和值提取到向量中?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板