如何从std :: map检索所有键(或值)并将其放入向量中? [英] How to retrieve all keys (or values) from a std::map and put them into a vector?

查看:87
本文介绍了如何从std :: map检索所有键(或值)并将其放入向量中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我出现的可能方式之一:

This is one of the possible ways I come out:

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 来从地图中检索所有值.

Of course, we can also retrieve all values from the map by defining another functor RetrieveValues.

还有其他方法可以轻松实现这一目标吗? (我一直想知道为什么std :: map不包含我们要执行的成员函数.)

Is there any other way to achieve this easily? (I'm always wondering why std::map does not include a member function for us to do so.)

推荐答案

虽然您的解决方案应该可以工作,但根据其他程序员的技能水平,可能很难阅读.此外,它将功能从呼叫站点移开.这会使维护更加困难.

While your solution should work, it can be difficult to read depending on the skill level of your fellow programmers. Additionally, it moves functionality away from the call site. Which can make maintenance a little more difficult.

我不确定您的目标是将密钥放入向量中还是将其打印到cout中,所以我会同时做.您可以尝试这样的事情:

I'm not sure if your goal is to get the keys into a vector or print them to cout so I'm doing both. You may try something like this:

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:

Or even simpler, if you are using 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版本,因为键入的次数更少,并且它的工作方式非常明确.

Personally, I like the BOOST_FOREACH version because there is less typing and it is very explicit about what it is doing.

这篇关于如何从std :: map检索所有键(或值)并将其放入向量中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆