2017-05-17 58 views
-3

我有一个枚举类有4个不同的值。 AB,CD排序枚举值的向量

我无法控制底层类型是什么。

我有一个枚举的向量,我想订购它,所以所有的A都是第一个。然后全部为B,然后全部为C,最后全部为D

我可以做很长的if语句。但我想知道是否有一种简单的惯用方法来实现这一点。

编辑:你误解了我想要的。我有一个枚举类是这样的:

enum class MyEnum { A = 3, B = 1, C = 4, D = 2}; 

我有这个枚举的一个载体,我想的顺序,从而为D.前B C前前

std::sort没有任何帮助都在这里。

+1

可能重复[如何对STL向量进行排序](http://stackoverflow.com/questions/2758080/how-to-sort-stl-vector) – InternetAussie

+0

John,你可以给你作为你的课程吗? – gsamaras

+0

'std :: sort'可以工作,但你必须编写自己的比较。 –

回答

0

C++不能根据名称对值进行排序,只能根据值进行排序,因此您必须提供映射到您想要排序的顺序。或使用表,或排名功能,如:

enum class MyEnum { A = 3, B = 1, C = 4, D = 2}; 

int rank(MyEnum value) 
{ 
    switch (value) 
    { 
    case MyEnum::A: 
     return 1; 

    case MyEnum::B: 
     return 2; 

    case MyEnum::C: 
     return 3; 

    case MyEnum::D: 
     return 4; 
    } 
} 

bool operator<(MyEnum left, MyEnum right) 
{ return rank(left) < rank(right); } 

现在std::sort(v.begin(), v.end())应该为MyEnum个向量工作。

如果您不希望比较这种方式而不是在排序中进行比较,您可以将operator<变成一个仿函数并将其传递给sort