2015-10-19 53 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' –