如何在C / C ++中获取Enum中的值索引

时间:2017-09-26 20:38:36

标签: c indexing enums

我已经搜索过但无法找到解决此问题的任何方法。 我有一个不以“0”开头的枚举,其他值也不按顺序排列,如

typedef enum{
a = 8,
b = 100,
c,
d = 1,
e = 9
}numberEnum;

我想在枚举中得到一个元素的索引;

int myIndex = getIndex(a); // myIndex = 0
int myIndex1 = getIndex(d); // myIndex1 = 3
int myIndex2 = getIndex(b); // myIndex2 = 1

int getIndex(numberEnum e)
{
    // some code here

   return index;
}

我不应该在这种情况下使用Array。使用枚举是必须的。有没有办法实现这个目标? 谢谢你的帮助。

3 个答案:

答案 0 :(得分:3)

枚举器没有“索引值”。所以这不是你可以查询的东西,也不是你期望的东西。这两个枚举在功能上是等价的:

enum alpha { first, second };
enum beta { second = 1, first = 0 };

我确信您可以执行一些宏操作来生成从枚举器名称到它们在枚举中列出的顺序的数组映射。但这需要将枚举及其枚举器包装在宏中。

答案 1 :(得分:2)

您必须手动建立此关联,如下所示:

int getIndex(numberEnum e)
{
   switch(e)
   {
       case a:
           return 0;
       case b:
           return 1;
       default:
           return -1;
   }
}

答案 2 :(得分:1)

索引枚举&#34;没有语义含义,它不是数据结构或数组,而是数据类型,没有 order < / em>,因为枚举的大小是单个值的大小 - &#34;索引&#34;没有任何意义。它是询问如何索引整数的行;所有枚举都是一个整数,如果有效值,则为定义的子集。

您可以使用const数组值并使用枚举对其进行索引来实现您想要的(尽管这样做的理由让我失望):

static const int values[] = {8, 100, 101, 1, 9} ;
typedef enum { a, b, c, d, e } numberEnum ;

numberEnum myIndex = a ; // myIndex = 0
numberEnum myIndex1 = d; // myIndex1 = 3
numberEnum myIndex2 = b; // myIndex2 = 1

int myValue = values[myIndex] ;
int mValue1 = values[myIndex1] ;
int mValue2 = values[myIndex2] ;

int valueC = values[c] ;