如何使用初始化器列表初始化带有比较lambda的std::映射



我可以使用初始化器列表来初始化std::map,如下所示:

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

我可以通过提供一个比较lambda(参见此处,搜索"lambda"(来更改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":函数样式初始值设定项似乎是函数定义

我也尝试在Ideone上运行代码,但出现了以下错误:

错误:输入末尾应为"}">

对我来说,这似乎是一种最令人烦恼的解析。我试图在初始值设定项列表中提供赋值运算符或使用std::make_pair,但没有成功。

如何在此处使用初始值设定项列表?有可能吗?

采用初始化器列表和比较器的构造函数如下:

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};

最新更新