Использование initializer_list на карте векторов - PullRequest
6 голосов
/ 18 мая 2010

Я пытался инициализировать карту <ints, vector<ints> >, используя новый стандарт 0X, но, похоже, не могу получить правильный синтаксис. Я хотел бы сделать карту с одной записью с ключом: значение = 1: <3,4>

#include <initializer_list>
#include <map>
#include <vector>
using namespace std;

map<int, vector<int> > A = {1,{3,4}};

....

Умирает со следующей ошибкой при использовании gcc 4.4.3:

error: no matching function for call to std::map<int,std::vector<int,std::allocator<int> >,std::less<int>,std::allocator<std::pair<const int,std::vector<int,std::allocator<int> > > > >::map(<brace-enclosed initializer list>)

Редактировать

Следуя предложению Cogwheel и добавив дополнительную фигурную скобку, теперь он компилируется с предупреждением, с которым можно избавиться, используя флаг -fno-deduce-init-list Есть ли опасность при этом?

1 Ответ

1 голос
/ 17 сентября 2010

Как уже упоминалось в комментарии, {1,{3,4}} - это отдельный элемент на карте, где ключом является 1, а значением является {3,4}. Итак, что вам нужно, это { {1,{3,4}} }.

Упрощение ошибки:

error: no matching function for call to map<int,vector<int>>::map(<brace-enclosed initializer list>)

Не точная ошибка, но, тем не менее, несколько полезная.

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