如何通过使用初始化列表初始化带有比较lambda的std :: map?

时间:2018-12-13 08:59:13

标签: c++11 comparator stdmap initializer-list

我可以使用初始化列表来初始化 spring.profiles.active=native spring.cloud.config.server.native.searchlocations =classpath:config/{application} ,如下所示:

std::map

我可以通过提供比较lambda来更改std::map<int, int> m {{5, 6}, {3, 4}, {1, 2}}; 的顺序(请参见here,搜索“ lambda”),如下所示:

std::map

现在,我尝试同时执行以下两项操作:

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

但是,这不能编译。在VS 2013上,出现以下错误:

  

错误C2448:'m':函数样式的初始化程序似乎是函数定义

I also tried running the code on Ideone,但出现以下错误:

  

错误:在输入末尾出现预期的“}”

在我看来,这most vexing parse有点像。我尝试提供assignment operator或使用std::make_pair within the initializer list,但无济于事。

如何在此处使用初始化列表?可能吗?

1 个答案:

答案 0 :(得分:1)

带初始化列表和比较器的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};