Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

чтобы вы могли:

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

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

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

Ответ 2

Чтобы вставить в std::map, вам нужно использовать std::make_pair().

Например:

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

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

Ответ 3

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