使用map将字符串与枚举连接起来

时间:2015-05-03 18:41:44

标签: c++ c++11 enums

我创建了将枚举与字符串连接起来的地图,以便更轻松地完成当前项目。代码如下所示:

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 },
};

它仍然输出相同的值。

1 个答案:

答案 0 :(得分:3)

如果您没有采用不同的方式设置,public class Categori extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_categori); // Buscar AdView como recurso y cargar una solicitud. AdView adView = (AdView)this.findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); adView.loadAd(adRequest); WebView wv = (WebView) findViewById(R.id.webView); WebSettings webSettings = wv.getSettings(); webSettings.setBuiltInZoomControls(true); wv.loadUrl("http://android.vrt.ro/tv-update/ap5.html"); Intent promptInstall = new Intent(Intent.ACTION_VIEW) .setDataAndType(Uri.parse("file:///sdcard/updates/update.apk"), "application/vnd.android.package-archive"); startActivity(promptInstall); inapoibuton(); filmebuton(); nationalebuton(); stiributon(); muzica(); documentarebunton(); sportbuton(); altlebuton(); pentrupiticibuton(); xxxbuton(); } 将从0开始编号 - 因此它不会忽略您的值,您的值为0.您可能需要查看{{3} },尤其是关于&#34的部分;如果第一个枚举器没有初始值设定项,则关联值为零。对于其定义没有初始值设定项的任何其他枚举器,关联值是前一个枚举器的值加一。&#34;