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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-29 20:30:11597浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn