2017-05-17 8 views
-3

私は4つの異なる値を持つenumクラスを持っています。 A,B,CおよびDである。値の列挙型のベクトルを

私は基礎となるタイプが何であるかを制御できません。

私は列挙型のベクトルを持っていますので、すべてAが最初です。すべてB、次にすべてC、最後にすべてDです。

非常に長いif文で実行できます。しかし、これを達成するための簡単な慣用方法があるのだろうかと思います。

編集:あなたは私が欲しいものを誤解しています。私はこのような列挙型クラスを持っている:

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

私はこの列挙のベクトルを持っていると私は注文したいので、AはD.

前にCの前にBの前に

std::sortであることをここではすべての助けにはなりません。

+1

[STLベクトルをソートする方法](http://stackoverflow.com/questions/2758080/how-to-sort-stl-vector) – InternetAussie

+0

ジョン、あなたはあなたのクラスで働くことができますか? – 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に渡すことができます。