2015-10-19 34 views
1

如何将映射关键字从映射复制到向量。具体来说,我有一个map<int, int>和我想要keys的地图形成一个新的载体(vector<int>)。使用变换将映射关键字复制到STL中的向量

因此,地图(<1,100>; <2,99>)应该给出(1,2)的载体。

问题here,恰恰描述了我需要的,但是对于值,但是回应太难理解了。我无法理解如何编写一元运算符函数。有人可以解释它是如何写成的吗?

+0

一元运算符:标准::变换(map.begin(),map.end(), 的std :: back_inserter(VEC ), boost :: bind(&MapT :: value_type :: second,_1));从map中获取与每个条目相关的值,并绑定到back_inserter方法的第一个参数。在你的情况下,你会使用value_type :: first – Nandu

回答

1

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 
+0

我想用'transform' –