Как вставить в std :: map? - PullRequest
       3

Как вставить в std :: map?

22 голосов
/ 07 декабря 2010

Есть ли стандартный итератор, который я мог бы использовать для вставки элементов в std :: map с использованием алгоритма std (например, std :: copy)?

Мне нужен контейнер для связи одного объекта со строкой, и я подумал об использовании std :: map. Есть ли лучший контейнер? Забыл сказать - предметы должны быть отсортированы.

Ответы [ 3 ]

31 голосов
/ 07 декабря 2010

Я думаю, что ОП ищет std::inserter(mymap, mymap.end())

, поэтому вы можете сделать:

std::copy( inp.begin(), inp.end(), std::inserter(mymap, mymap.end()) );

Типы ввода должны быть парным типом, который использует ваша карта, в противном случае вашАлгоритм должен был бы быть std :: transform с функцией / функтором для преобразования входного типа в такую ​​std :: pair.

На самом деле вставщик - это не итератор, а шаблонная функция, которая создает итератор (std:: insert_iterator, который является шаблонным типом, но тип автоматически разрешается при вызове функции).

13 голосов
/ 07 декабря 2010

Для вставки в std::map необходимо использовать std::make_pair().

Например:

std::map<int,std::string> Map;
Map.insert(std::make_pair(5,"Hello"));

Попробуйте что-то подобное.:)

5 голосов
/ 07 декабря 2010

Да, std::copy может вставить несколько элементов в карту, если вы используете std::insert_iterator в качестве OutputIterator (используйте вспомогательную функцию std::inserter для их создания; таким образом, тип шаблона может быть выведен).«Элементы» std :: map - это пары ключ-значение, которые вы можете создать с помощью std::make_pair, как иллюстрирует Prasoon.(Фактический тип - std::pair<Key, Value>; опять же, вспомогательная функция позволяет вычитать тип шаблона.) Если у вас есть ключи в одной последовательности и значения в другой, вы сможете использовать std::transform для создания последовательности ключейпары-значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...