use*_*792 2 c++ initialization map
我今天刚刚开始学习c ++,并且很难找到一种优雅的方式来初始化地图.在mo,可怕的方法是:
typedef std::map < char, map < char, int > > terribly_initialised_map;
Run Code Online (Sandbox Code Playgroud)
然后
terribly_initialised_map plz_help;
plz_help['m']['e'] = 1;
....
...
..
.
Run Code Online (Sandbox Code Playgroud)
肯定有更好的办法?
在C++ 11中,它更容易:
map_type someMap{
{'m', {
{'e', 1},
{'f', 2}
}},
{'a', {
{'b', 5}
}}
};
Run Code Online (Sandbox Code Playgroud)
这使用列表初始化,使用std::map列表构造函数(采用a的那个std::initializer_list<std::pair<Key, Value>>).这些对也可以用两个存储的值进行列表初始化.
在C++ 03中,你可以很好地使用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)
)
;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3270 次 |
| 最近记录: |