Доступ ко вторым элементам карты с помощью for_each или transform

Я хотел бы спросить вас, как я могу скопировать все вторые элементы из

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));

но это не сработало для меня — я получил ошибку «Незаконное использование этого типа».

1

Решение

Причина, по которой вы получаете ошибку, состоит в том, что 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"));
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector