1

我想问你我怎么能复制所有的第二个元素

map<string, string> myMap

deque<string> myDeq

在不创建仿函数的情况下使用 for_each 或 transform。我在这个问题中尝试过

transform(myMap.begin(), myMap.end(), back_inserter(myDeq), mem_fun_ref(&map<string, string>::value_type::second)); 

但它对我不起作用 - 我收到错误“非法使用这种类型”。

4

1 回答 1

0

您收到错误的原因map<string, string>::value_type::second是不是成员函数。它只是 std::pair 模板结构的成员变量。

一种不使用仿函数的可能解决方案是使用 lambda。但这是一个 C++11 特性,所以我不知道这是否是你想要的。

看看下面的例子

#include <iostream>
#include <map>
#include <deque>
#include <algorithm>
#include <string>
#include <iterator>

using namespace std;

int main()
{
    map<string,string> myMap;
    deque<string> myDeque;

    myMap["key1"]="value1";
    myMap["key2"]="value2";
    transform(myMap.begin(),myMap.end(),back_inserter(myDeque),[](map<string,string>::value_type p){return p.second;});

    copy(myDeque.begin(),myDeque.end(),ostream_iterator<string>(cout,"\n"));
}
于 2012-12-18T17:36:33.010 回答