вставьте std::initializer_list в std::map

У меня есть такой метод:

std::map<std::string, int> container;

void myMap(std::initializer_list<std::pair<std::string, int>> input)
{
    // insert 'input' into map...
}

Я могу вызвать этот метод следующим образом:

myMap({
    {"foo", 1}
});

Как я могу преобразовать свой собственный аргумент и вставить его в карту?

Я попытался:

container = input;

container(input);

Но не работает, потому что параметр карты только std::initializer_list, а std::pair там нет.

Спасибо вам всем.


person SH.0x90    schedule 23.02.2014    source источник


Ответы (2)


container.insert(input.begin(), input.end());

Если вы хотите заменить содержимое карты. сначала сделайте container.clear();.

person Brian Bi    schedule 23.02.2014

Ваша проблема в том, что value_type для std::map‹std::string,int› не std::pair‹std::string,int›. Это std::pair‹const std::string, int›. Обратите внимание на const в ключе. Это отлично работает:

std::map<std::string, int> container;

void myMap(std::initializer_list<std::pair<const std::string, int>> input) {
    container = input;
}

Если вы не можете изменить сигнатуру своей функции, вам нужно написать цикл или использовать std::copy для преобразования каждого элемента ввода в value_type контейнера. Но я предполагаю, что вы, вероятно, можете, поскольку она называется myMap, а не otherGuysMap :) .

person Billy Donahue    schedule 23.02.2014