我今天刚开始学习C++,在初始化一个映射的映射时遇到了困难。目前,使用的方法非常糟糕:
typedef std::map < char, map < char, int > > terribly_initialised_map;
然后
terribly_initialised_map plz_help;
plz_help['m']['e'] = 1;
....
...
..
.
一定有更好的方法吧?
我今天刚开始学习C++,在初始化一个映射的映射时遇到了困难。目前,使用的方法非常糟糕:
typedef std::map < char, map < char, int > > terribly_initialised_map;
然后
terribly_initialised_map plz_help;
plz_help['m']['e'] = 1;
....
...
..
.
一定有更好的方法吧?
map_type someMap{
{'m', {
{'e', 1},
{'f', 2}
}},
{'a', {
{'b', 5}
}}
};
std::map
的列表构造函数(接受一个std::initializer_list<std::pair<Key, Value>>
)。这些键值对也可以通过列表初始化来存储两个值。boost::map_list_of
,但是对于嵌套映射,它可能不比你已有的方法更好,特别是外部调用需要是一个特定的list_of
调用以消除歧义。using boost::assign::list_of;
using boost::assign::map_list_of;
map_type someMap =
list_of<map_type::value_type>
('m',
map_list_of
('e', 1)
('f', 2)
)
('a',
map_list_of
('b', 5)
)
;
return {blah};
而不必再次声明类型。目前我的答案在 Clang 中可以编译通过。请确保启用了 C++11 支持(-std=c++11
)并且编译器支持统一初始化和初始化列表。 - chris