如何將映射關鍵字從映射覆制到向量。具體來說,我有一個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