2017-07-29 14 views
-2

私は、文字列値を渡すことによって、列挙型のインデックス値を取得しようとしています。このC + +で列挙型の値に変換する方法はありますか

enum week{Mon, Tue, Wed, Thur, Fri, Sat, Sun}; 

のような列挙型を持っています。

たとえば、GetenumIndex("Mon")0を返します。

関数のプロトタイプのようなある:

week GetenumIndex(string) 

、このような変換機能を実装するためのC++での慣用の方法は何ですか?

+0

これは、多くの 'if()else if()'ステートメントを使用すると非常に簡単になるはずです。あなたはすでにそれを試しましたか? – user0042

+0

あなたの質問に欠けていることが非常に重要です。それは実際の具体的な質問でしょう。 –

+0

文字列を列挙値にマップする[マップ](http://en.cppreference.com/w/cpp/container/unordered_map)を使用できます。 –

答えて

0

さて、ここであなたが行く:

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

enum week{Mon, Tue, Wed, Thur, Fri, Sat, Sun}; 

week GetenumIndex(const std::string s) {  
    static std::map<std::string,week> string2week { 
     { "Mon", Mon }, 
     { "Tue", Tue }, 
     { "Wed", Wed }, 
     { "Thur", Thur }, 
     { "Fri", Fri }, 
     { "Sat", Sat }, 
     { "Sun", Sun } 
    }; 
    auto x = string2week.find(s); 
    if(x != std::end(string2week)) { 
     return x->second; 
    } 
    throw std::invalid_argument("s"); 
} 

int main() { 
    week w = GetenumIndex("Thur"); 
    std::cout << w << std::endl; 
} 

ライブhereそれを参照してください。

+0

私を助けてくれたあなたのおかげです。お互いの時間を無駄にしてしまったばかりの人に似ているわけではない@Sam Varshavchik – user8364661

+1

@ user8364661 – user0042

関連する問題