使用地图将字符串与枚举连接

Using map to connect string with enum

本文关键字:枚举 连接 字符串 地图      更新时间:2023-10-16

i创建了将枚举与字符串连接起来的地图,以便使执行当前项目的时间更轻松。代码看起来像这样:

struct responseMap : public std::map < std::string, CitizenType > {
    responseMap() {
        this->operator[]("slave") = CitizenType::slave;
        this->operator[]("trader") = CitizenType::trader;
        this->operator[]("priest") = CitizenType::priest;
        this->operator[]("scholar") = CitizenType::scholar;
        this->operator[]("soldier") = CitizenType::soldier;
        this->operator[]("archer") = CitizenType::archer;
        this->operator[]("swordsman") = CitizenType::swordsman;
        this->operator[]("emperor") = CitizenType::emperor;
    }
};

我的枚举只是地图中描述的这些类型。一切都很好,它不将"从"视为地图的成员。例如,如果我写下以下代码:

responseMap myMap;
std::cout<<myMap["slave"]<<" "<<myMap["trader"];

它将产生以下行:0 1

我的问题是为什么我以同样的方式描述它们?

编辑:我正在使用这样的普通地图尝试:

std::map<std::string, CitizenType> otherMap = {
    { "slave", CitizenType::slave },
    { "trader", CitizenType::trader },
    { "priest", CitizenType::priest },
    { "scholar", CitizenType::scholar },
    { "soldier", CitizenType::soldier },
    { "archer", CitizenType::archer },
    { "swordsman", CitizenType::swordsman },
    { "emperor", CitizenType::emperor },
};

它仍然输出相同的值。

如果您没有以不同的方式设置它,则enum将从0索引 - 因此它不忽略您的价值,您的值为0。部分关于"如果第一个枚举者没有初始化器,则关联的值为零。对于任何其他枚举没有初始化器的枚举器,关联的值是上一个枚举器加一个的值。"

<</p> <。/div>