MrNexeon
@MrNexeon

Как добавить все элементы из вектора в контейнер multimap под определенный ключ?

Добрый день. Допустим, есть некий вектор:
vector<string> names = {"Ivan", "Alexandr", "Kirill", "Victor"};

А так же есть некий контейнер типа multimap:
multimap<int, string> users;

Как реализовать добавление всех элементов вектора names в карту users под определенным ключом?
К примеру я хочу что бы ключ[1] имел значения "Ivan", "Alexandr", "Kirill", "Victor".

Использование insert() с итератором начала и конца вектора не пойдет, есть вариант перебирать элементы вектора:
for (auto &i :  names) {
users.insert({1, i}); //добавляем имена в группу 1 (добавляем элемент вектора как значение-ключа для ключа[1])
}

Но есть ли более экономичные способы или альтернативы?
P.S. Делаю это для практики, еще только изучаю cpp
  • Вопрос задан
  • 404 просмотра
Пригласить эксперта
Ответы на вопрос 2
multimap<int, vector<string>> users;
Ответ написан
@Mercury13
Программист на «си с крестами» и не только
Если вам нужен именно multimap, другого способа я не вижу. Но если элементов много, стоит задействовать хинт (параметр position, где примерно элемент будет стоять). Что-то типа (в компиляторе не проверял, код почти гарантированно неверный).
if (!names.empty()) {
    Users::const_iterator hint = users.upper_bound(1);
    for (auto &i :  names) {
      users.insert(hint, {1, i});
    }
}

Учтите, что при переходе с 03 в 11 поменялся смысл хинта, тут версия для 11.
P.S. Извините, код для хинта можно сделать и проще. После вставки и ++ хинт останется тем же.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы