如何将无效的用户输入映射到枚举列表中的最后一个值?

时间:2015-07-16 09:25:46

标签: c++ input enums

我有一个基本的enum声明:

enum Title {Prof, Dr, Mr, Mdm, Mrs, Miss, NA};

我已设法将用户输入从0映射到5,其值分别来自枚举列表:

std::map<std::string,Title> m;
m["0"] = Prof;
m["1"] = Dr;
m["2"] = Mr;
m["3"] = Mdm;
m["4"] = Mrs;
m["5"] = Miss;
m[???] = NA; // What should I do here    

std::string stitle;

cout << "\n" << "Title (0:Prof 1:Dr 2:Mr 3:Mdm 4:Mrs 5:Miss Any:NA): ";
cin >> stitle;
Title title = m[stitle];

如何将用户输入(例如670旁边的任何输入映射到枚举列表中5的{​​{1}}?

3 个答案:

答案 0 :(得分:3)

你做不到。您可以使用find代替operator []

std::map<std::string, Title>::iterator pos = m.find(stitle);
Title title = pos == m.end() ? NA : pos->second;

答案 1 :(得分:1)

我会使用operator[]而不是使用at,它会隐式添加一个键的条目(如果它不存在),而是引发异常:

Title title;
try {
    title = m.at(stitle);
}
catch (const std::out_of_range& oor) {
    title = NA;
}

答案 2 :(得分:0)

我认为你正在寻找像

这样的东西
if(m.find(stitle) == m.end()) { cout << "Invalid input" << endl; //Exit here or loop again? }
else
  Title title = m[stitle];