如何将映射关键字从映射复制到向量。具体来说,我有一个map<int, int>
和我想要keys
的地图形成一个新的载体(vector<int>
)。使用变换将映射关键字复制到STL中的向量
因此,地图(<1,100>; <2,99>)
应该给出(1,2)
的载体。
问题here,恰恰描述了我需要的,但是对于值,但是回应太难理解了。我无法理解如何编写一元运算符函数。有人可以解释它是如何写成的吗?
如何将映射关键字从映射复制到向量。具体来说,我有一个map<int, int>
和我想要keys
的地图形成一个新的载体(vector<int>
)。使用变换将映射关键字复制到STL中的向量
因此,地图(<1,100>; <2,99>)
应该给出(1,2)
的载体。
问题here,恰恰描述了我需要的,但是对于值,但是回应太难理解了。我无法理解如何编写一元运算符函数。有人可以解释它是如何写成的吗?
The accepted answer您在帖子中链接的问题几乎包含了您需要的所有内容。你需要改变只有一条线路:
更新而不是
v.push_back(it->second);
使用
v.push_back(it->first);
,响应OP的评论
可以使用std::transform
与lambda函数提取std::map
的密钥并将它们放入std::vector
。
样例程序:
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
#include <iterator>
using namespace std;
int main()
{
map<int, int> m{{1, 20}, {2, 40}};
vector<int> keys;
// Retrieve all keys
transform(m.begin(), m.end(), back_inserter(keys), [](std::pair<int, int> p) { return p.first;});
// Dump all keys
copy(keys.begin(), keys.end(), ostream_iterator<int>(cout, "\n"));
}
输出:
1
2
我想用'transform' –
一元运算符:标准::变换(map.begin(),map.end(), 的std :: back_inserter(VEC ), boost :: bind(&MapT :: value_type :: second,_1));从map中获取与每个条目相关的值,并绑定到back_inserter方法的第一个参数。在你的情况下,你会使用value_type :: first – Nandu