c – 从地图获取值列表

有没有办法从地图获取值列表?

我有

std::map<A,B> myMap;

我想要一个只返回值列表的函数,即std :: list< B> (或为此设定.
是否有内置的stl方法来做到这一点?

解决方法

地图元素被定义为map :: value_type,并且它的类型是一对< A,B>.第一是关键,第二是价值.您可以编写一个 functor从值类型中提取第二个,并将其复制到向量(或列表或任何您想要的).执行复制的最佳方法是使用transform,它只是它的名称所暗示的:它需要一种类型的值,并将其转换为不同类型的值.

这是一个完整的工作示例:

#include <cstdlib>
#include <map>
#include <string>
#include <algorithm>
#include <iterator>
#include <vector>
#include <iostream>
using namespace std;

typedef map<unsigned,string> MyMap;
MyMap my_map;

struct get_second : public std::unary_function<MyMap::value_type,string>
{
    string operator()(const MyMap::value_type& value) const
    {
        return value.second;
    }
};

int main()
{
    my_map[1] = "one";
    my_map[2] = "two";
    my_map[3] = "three";
    my_map[4] = "four";
    my_map[5] = "five";

    // get a vector of values
    vector<string> my_vals;
    transform(my_map.begin(),my_map.end(),back_inserter(my_vals),get_second() );

    // dump the list
    copy( my_vals.begin(),my_vals.end(),ostream_iterator<string>(cout,"\n"));
}

编辑:

如果您有一个支持C 0x lambdas的编译器,则可以完全消除该函数.这对于使代码更易于阅读,更具说服力,更容易维护,这是非常有用的,因为您不会在代码库中浮动几十个小型一次性的函子.以下是如何更改上述代码以使用lambda:

transform(my_map.begin(),[](const MyMap::value_type& val){return val.second;} );

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...