我想静态初始化map<string, pair<some_enum, string> >
。让我们说一个从员工ID到职位(enum)+名称的地图。
我希望它看起来像这样:
map<string, pair<some_enum, string> > = {
{ "1234a", { BOSS, "Alice" }},
{ "5678b", { SLAVE, "Bob" }},
{ "1111b", { IT_GUY, "Cathy" }},
};
在C ++中执行此操作的最佳方法是什么?
答案 0 :(得分:6)
C ++ 11中的最佳方法:
std::map<string, pair<some_enum, std::string>> my_map = {
{ "1234a", { BOSS, "Alice" }},
{ "5678b", { SLAVE, "Bob" }},
{ "1111b", { IT_GUY, "Cathy" }},
};
这很容易。
如果不使用像boost这样的外部库,标准C ++ 03中根本不可能。
答案 1 :(得分:6)
在C ++ 11中,你的工作正常(假设你在变量声明中添加了一个标识符名称)。
在之前的版本中,一种方法是使用构建地图的自由函数:
typedef std::map<std::string, std::pair<some_enum, std::string> > map_type;
static map_type create_map()
{
map_type map;
map["1234a"] = std::make_pair(BOSS, "Alice");
map["5678b"] = std::make_pair(SLAVE, "Bob");
map["1111b"] = std::make_pair(IT_GUY, "Cathy");
return map;
}
map_type foo = create_map();
或者您可以使用Boost.Assign:
std::map<std::string, std::pair<some_enum, std::string> > foo =
boost::assign::map_list_of("1234a", std::make_pair(BOSS, "Alice"))
("5678b", std::make_pair(SLAVE, "Bob"))
("1111b", std::make_pair(IT_GUY, "Cathy"));