2017-05-17 56 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