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