C++通过map对string进⾏switch操作(优雅+后端必看)10⽉23⽇操作记录:
1、c ++ 中stack声明和vector声明⽅式⼀致;
2、stack的top()⽅法只能获得栈顶元素,⽽不能删除,删除需⽤pop();
3、c ++ 中map的声明和java⼀样,只不过是⼩写,包含在头⽂件#include <map>中;
4、c ++ 中map没有put⽅法,插⼊元素当成数组插⼊,即map[index] = value,或者使⽤insert进⾏插⼊:
insert(std::pair<int, string>(key, value))
5、c ++ 中map元素的访问当成数组来访问,即value = map[index];
6、c ++ 中map通过value获得key的⽅式,提供函数如下;
#incldue <map>
vector<int> getKeyByValue(string s) {
vector<int> keyVector;
for (std::map<int, string>::iterator it = map.begin(); it != d(); it ++) {
if (it -> second == value) {
keyVector.push_back(it -> first);
}
}
return keyVector;
}
这⾥注意返回的是⼀个key的vector,因为同⼀个value可能拥有多个key;但key是唯⼀的,当insert进⼀个已包含的key键值对时,本次insert是⽆效的;
7、c ++ 中string⽆需通过stycmp进⾏⽐对,可通过string._Equal()进⾏⽐对;
8、c ++ 中char类型可通过字符流stringstream转换为string, 提供函数如下:
#include <sstream>
string charToString(char c) {
string s;
stringstream transform;
transform << c;
s = transform.str();
return s;
}
9、如何⽤switch对string类型进⾏选择?
switch只⽀持对常量进⾏选择,即基本数据类型,为了保持代码优雅,避免⼤量if、else语句的出现,可通过map或enum对需要选择的引⽤类型进⾏管理:
#include <map>
map<int, string> switchMap;
void input(int n, vector<string> stringVector) {
for (int i = 0; i < n; i ++) {
string s;
getline(cin, s);
stringVector.push_back(s);
switchMap.insert(std::pair<int, string>(i, s));
}
}
vector<int> getKeyByValue(string s) {
vector<int> keyVector;
for (std::map<int, string>::iterator it = map.begin(); it != d(); it ++) { if (it -> second == value) {
keyVector.push_back(it -> first);
}
}
return keyVector;
}
void operateSwitch(string s) {
vector<int> keyVector = getKeyByValue(s);java switch case string
for (int i = 0; i < keyVector.size(); i ++) {
switch(keyVector[i]) {
case 1 : cout << switchMap[keyVector[i]] << endl; break;
case 2 : cout << switchMap[keyVector[i]] << endl; break;
case 3 : ......
......
}
}
}
这⾥只是随⼿写个demo,只是为了传达这种思想, enum同样可以做到;同样的⽅法也可以⽤到 JAVA 中
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论