我可以使用初始化器列表来初始化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};