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条经验 获得超5个赞
为此有一个升压范围适配器:
vector<int> keys;
// Retrieve all keys
boost::copy(m | boost::adaptors::map_keys, std::back_inserter(keys));
有一个类似的map_values范围适配器可用于提取值。
- 3 回答
- 0 关注
- 1159 浏览
添加回答
举报