Как вставить в std:: map?
Есть ли std-итератор, который я мог бы использовать для вставки элементов в std:: map, используя std-алгоритм (например, std:: copy)?
Мне нужен контейнер, чтобы связать один объект с строкой, и я подумал об использовании std:: map. Есть ли лучший контейнер? Забыл сказать - предметы нужно сортировать.
Ответы
Ответ 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
для создания последовательности ключей -значные пары.