解决方法
地图元素被定义为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;} );