c++可以更好地初始化映射映射

c++ initialize a map of maps more nicely

本文关键字:映射 初始化 更好 c++      更新时间:2023-10-16

我今天刚开始学习c++,很难找到一种优雅的方法来初始化地图。目前,可怕的方法是:

typedef std::map < char, map < char, int > >  terribly_initialised_map;

然后

terribly_initialised_map plz_help;
plz_help['m']['e'] = 1;
....
...
..
.

一定有更好的方法吗?

在C++11中,要简单得多

map_type someMap{
    {'m', {
        {'e', 1},
        {'f', 2}
    }},
    {'a', {
        {'b', 5}
    }}
};

这利用了列表初始化,使用std::map的列表构造函数(采用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)
    )
;