c ++更好地初始化地图地图

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)

肯定有更好的办法?

chr*_*ris 7

在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)