Как я могу инициализировать std :: map с лямбда сравнения, используя список инициализатора? - PullRequest
0 голосов
/ 13 декабря 2018

Я могу использовать список инициализаторов для инициализации std::map следующим образом:

std::map<int, int> m {{5, 6}, {3, 4}, {1, 2}};

Я могу изменить порядок std::map, предоставив лямбду сравнения (см. здесь , найдите «лямбда») следующим образом:

auto comp = [](int a, int b) { return b < a; };
std::map<int, int, decltype(comp)> m(comp);

Теперь я попытался одновременно выполнить оба действия следующим образом:

std::map<int, int, decltype(comp)> m(comp) {{5, 6}, {3, 4}, {1, 2}};

Однако это не компилируется.На VS 2013 я получаю следующую ошибку:

ошибка C2448: 'm': инициализатор в стиле функции выглядит как определение функции

Iтакже попытался запустить код на Ideone , но там я получаю следующую ошибку:

ошибка: ожидается '}' в конце ввода

ThisДля меня это выглядит как самый неприятный синтаксический анализ .Я пытался предоставить оператор присваивания или использовать std::make_pair в списке инициализаторов , но безрезультатно.

Как я могу использовать список инициализаторов здесь?Возможно ли это вообще?

1 Ответ

0 голосов
/ 13 декабря 2018

Ctor, который принимает список инициализатора и компаратор:

map( std::initializer_list<value_type> init,
     const Compare& comp = Compare(),
     const Allocator& alloc = Allocator() );

, поэтому вы должны написать

auto comp = [](int a, int b) { return b < a; };
std::map<int, int, decltype(comp)> m{{{5, 6}, {3, 4}, {1, 2}},comp};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...