Я хотел бы спросить вас, как я могу скопировать все вторые элементы из
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));
но это не сработало для меня — я получил ошибку «Незаконное использование этого типа».
Причина, по которой вы получаете ошибку, состоит в том, что map<string, string>::value_type::second
не является функцией-членом. Это просто переменная-член структуры шаблона std :: pair.
Одним из возможных решений без использования функторов является использование лямбд. Но это особенность 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"));
}
Других решений пока нет …