我有一个基本的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];
如何将用户输入(例如6
,7
或0
旁边的任何输入映射到枚举列表中5
的{{1}}?
答案 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];