使用transform将映射键复制到STL中的向量

时间:2015-10-19 01:52:19

标签: c++ vector stl

如何将键从地图复制到矢量。具体来说,我有一个map<int, int>,我希望地图的keys形成一个新的向量(vector<int>)。

因此,地图(<1,100>; <2,99>)应该提供(1,2)的向量。

问题here,描述了我需要的东西,但是对于价值观,但是回答太过神秘而无法理解。我无法理解如何编写一元运算符函数。有人可以解释它是如何写的吗?

1 个答案:

答案 0 :(得分:3)

您在帖子中链接到的问题的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