C++ C++;初始化对的映射

C++ C++;初始化对的映射,c++,stl,initialization,C++,Stl,Initialization,我想静态初始化映射。让我们假设一个从员工id到职务(枚举)+姓名的映射 我希望它看起来像这样: map<string, pair<some_enum, string> > = { { "1234a", { BOSS, "Alice" }}, { "5678b", { SLAVE, "Bob" }}, { "1111b", { IT_GUY, "Cathy" }}, }; map={ {“1234a”{老板,“爱丽丝”}, {“5678b”{SLAVE,“Bo

我想静态初始化
映射
。让我们假设一个从员工id到职务(枚举)+姓名的映射

我希望它看起来像这样:

map<string, pair<some_enum, string> > = {
  { "1234a", { BOSS, "Alice" }},
  { "5678b", { SLAVE, "Bob" }},
  { "1111b", { IT_GUY, "Cathy" }},
};
map={
{“1234a”{老板,“爱丽丝”},
{“5678b”{SLAVE,“Bob”},
{“1111b”{IT_GUY,“Cathy”},
};
< C++中最好的方法是什么?

< p> C++ 11中的最好方法:

std::map<string, pair<some_enum, std::string>> my_map = {
  { "1234a", { BOSS, "Alice" }},
  { "5678b", { SLAVE, "Bob" }},
  { "1111b", { IT_GUY, "Cathy" }},
};
std::map my\u map={
{“1234a”{老板,“爱丽丝”},
{“5678b”{SLAVE,“Bob”},
{“1111b”{IT_GUY,“Cathy”},
};
就这么简单

在标准C++03中,如果不使用像boost这样的外部库,这是不可能的。

在C++11中,最好的方法是:

std::map<string, pair<some_enum, std::string>> my_map = {
  { "1234a", { BOSS, "Alice" }},
  { "5678b", { SLAVE, "Bob" }},
  { "1111b", { IT_GUY, "Cathy" }},
};
std::map my\u map={
{“1234a”{老板,“爱丽丝”},
{“5678b”{SLAVE,“Bob”},
{“1111b”{IT_GUY,“Cathy”},
};
就这么简单


在标准C++03中,如果不使用像boost这样的外部库,这是不可能的。

在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();
typedef std::map\u type;
静态映射类型创建映射()
{
地图类型地图;
map[“1234a”]=std::make_pair(BOSS,“Alice”);
map[“5678b”]=std::make_对(从机,“Bob”);
map[“1111b”]=std::make_pair(IT_GUY,Cathy);
返回图;
}
map_type foo=create_map();
或者您可以利用:

std::map foo=
boost::assign::map\u list\u of(“1234a”,std::make\u pair(BOSS,“Alice”))
(“5678b”,标准::制造成对(从机,Bob”))
(“1111b”,std::make_-pair(IT_-GUY,Cathy));

在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();
typedef std::map\u type;
静态映射类型创建映射()
{
地图类型地图;
map[“1234a”]=std::make_pair(BOSS,“Alice”);
map[“5678b”]=std::make_对(从机,“Bob”);
map[“1111b”]=std::make_pair(IT_GUY,Cathy);
返回图;
}
map_type foo=create_map();
或者您可以利用:

std::map foo=
boost::assign::map\u list\u of(“1234a”,std::make\u pair(BOSS,“Alice”))
(“5678b”,标准::制造成对(从机,Bob”))
(“1111b”,std::make_-pair(IT_-GUY,Cathy));

最好的方法就是如何拥有它。我也喜欢你按职位分类的方式。。有什么问题吗?如果你使用的是与C++11标准兼容的编译器,这应该是可行的。最好的方法是如何使用它。我也喜欢你按职位分类的方式。。有什么问题吗?如果你使用的是与C++11标准兼容的编译器,这应该是可行的。C++03还不错。类似于 Booo::“1234”,“STD::MaMaGeOBIN(BOSS,“爱丽丝”))(“5678B”,…)……/Mult> HMM,我在考虑标准C++。我会让其他人谈谈boost,因为我没有太多的经验。C++03还不错。类似于 Booo::“1234”,“STD::MaMaGeOBIN(BOSS,“爱丽丝”))(“5678B”,…)……/Mult> HMM,我在考虑标准C++。我会让其他人谈谈boost,因为我对它没有太多经验。(make_pair后缺少括号)@PiotrS。它们不是必需的;编译器将推断模板类型参数。(这就是
std::make_pair
的全部原因——如果要自己指定模板类型参数,可以直接使用
std::pair
构造函数。)我的意思是()括号,而不是@PiotrS。啊,你是说帕伦斯。好的,我会解决的。如果我从中学到一件事的话,那就是永远不要说括号,希望人们知道你在说哪一种。(配对后缺少括号)@PiotrS。它们不是必需的;编译器将推断模板类型参数。(这就是
std::make_pair
的全部原因——如果要自己指定模板类型参数,可以直接使用
std::pair
构造函数。)我的意思是()括号,而不是@PiotrS。啊,你是说帕伦斯。好的,我会解决的。如果有一件事我从中学到了,那就是永远不要说括号,希望人们知道你在说哪一种。