如何给一个枚举值的索引得到它?

时间:2014-03-05 18:15:55

标签: c++

我有这个枚举:

enum Status { CONTINUE, WON, LOST };

我想给一个值的索引(例如WON为1)并获得值(WON)。 我搜索但我发现相反的方法! 我发现这个代码要做,但它再次给我索引:

int main()
{
enum Status { CONTINUE, WON, LOST };
int myInteger = 1;
Status myValue = (Status)myInteger;
cout << myValue <<endl;//it rerurns 1 !!!
system("PAUSE");
}

那么从枚举中获取值的语法是什么? //我需要像array [1]

这样的东西

3 个答案:

答案 0 :(得分:3)

C ++“继承了”来自C的enum。它实际上只不过是传统的C语言做法的简写,你的enum就是这样的:

#define CONTINUE 0
#define WON 1
#define LOST 2

enum自动为符号分配连续的数字,但不多于此。

C ++ 11添加了enum class,它创建了一个更像普通类型的枚举,但它仍然没有提供一种(自动)方式将数字表示转换为您使用的符号。

答案 1 :(得分:1)

enum类型只保存值而不是名称

可能你可以像这样编码

enum Status { CONTINUE, WON, LOST };
const char* status_names[] = {"CONTINUE", "WON", "LOST"};
int myInteger = 1;
cout << status_names[myInteger] << endl; 

here是构思链接

答案 2 :(得分:0)

您可以使用STL中的map

例如:

#include <iostream>
#include <map>
#include <string> 


using namespace std;

int main()
{

    typedef enum { CONTINUE, WON, LOST } status_t;

    map<int, string> Status = {
        {CONTINUE, "CONTINUE"},
        {WON, "WON"},
        {LOST, "LOST"}
    };


    cout << Status[1] << endl;    
    // It's also possible
    cout << Status[CONTINUE] << endl;    



    return 0;
}