这是我出来的可能方式之一:
struct RetrieveKey
{
template <typename T>
typename T::first_type operator()(T keyValuePair) const
{
return keyValuePair.first;
}
};
map<int, int> m;
vector<int> keys;
// Retrieve all keys
transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey());
// Dump all keys
copy(keys.begin(), keys.end(), ostream_iterator<int>(cout, "\n"));
当然,我们也可以通过定义另一个函子 RetrieveValues 从地图中检索所有值。
有没有其他方法可以轻松实现这一目标? (我一直想知道为什么 std::map
不包括我们这样做的成员函数。)
原文由 Owen 发布,翻译遵循 CC BY-SA 4.0 许可协议
虽然您的解决方案应该有效,但根据您的程序员同事的技能水平,可能难以阅读。此外,它将功能从呼叫站点移开。这会使维护变得更加困难。
我不确定您的目标是将密钥放入向量中还是将它们打印到 cout 中,所以我两者都做。你可以尝试这样的事情:
或者更简单,如果您使用的是 Boost:
就个人而言,我喜欢 BOOST_FOREACH 版本,因为它的输入更少,而且它的功能非常明确。