3 回答

TA貢獻1824條經驗 獲得超5個贊
雖然您的解決方案應該可以工作,但根據其他程序員的技能水平,可能很難閱讀。此外,它將功能從呼叫站點移開。這會使維護更加困難。
我不確定您的目標是將密鑰轉換為向量還是將其打印為cout,所以我會同時進行。您可以嘗試如下操作:
map<int, int> m;
vector<int> v;
for(map<int,int>::iterator it = m.begin(); it != m.end(); ++it) {
v.push_back(it->first);
cout << it->first << "\n";
}
甚至更簡單,如果您使用的是Boost:
map<int,int> m;
pair<int,int> me; // what a map<int, int> is made of
vector<int> v;
BOOST_FOREACH(me, m) {
v.push_back(me.first);
cout << me.first << "\n";
}
就個人而言,我喜歡BOOST_FOREACH版本,因為鍵入的次數更少,并且它在做什么方面非常明確。

TA貢獻1744條經驗 獲得超4個贊
//c++0x too
std::map<int,int> mapints;
std::vector<int> vints;
vints.reserve(mapints.size());
for(auto const& imap: mapints)
vints.push_back(imap.first);

TA貢獻1993條經驗 獲得超6個贊
為此有一個升壓范圍適配器:
vector<int> keys;
// Retrieve all keys
boost::copy(m | boost::adaptors::map_keys, std::back_inserter(keys));
有一個類似的map_values范圍適配器可用于提取值。
- 3 回答
- 0 關注
- 1224 瀏覽
添加回答
舉報