1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//C++ Листинг #1.1 параметр switch не может быть строкой #include <iostream> using namespace std; int main() { string S1 = "S1"; string S2 = "S2"; string S3 = "S3"; string S; S = S2; //В какой-то момент времени S принимает одно из строковых значений switch (S){ //Ошибка. метки не могут иметь тип string case S1: cout << S1 << '\n'; break; case S2: cout << S2 << '\n'; break; case S3: cout << S3 << '\n'; break; default: cout << '\n' ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
//C++ Листинг #1.2 map как if #include <iostream> #include <map> #include <utility> using namespace std; int main(){ map<string, string> m; m.insert(pair("S1", ">> S1")); m.insert(pair("S2", ">> S2")); m.insert(pair("S3", ">> S3")); /*Так можно обращаться к значениям*/ /* cout << m.find("S1")->second << '\n'; cout << m.find("S2")->second << '\n'; cout << m.find("S3")->second << '\n'; */ //Теперь if (S == 2){ cout << ">> S2"; } можно написать так: cout << m.find("S2") -> second; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//C++ Листинг #1.3 map как альтернатива switch #include <iostream> #include <map> #include <utility> using namespace std; int main() { map<string, string> m; string S; m.insert(pair("S1", ">> S1")); m.insert(pair("S2", ">> S2")); m.insert(pair("S3", ">> S3")); cout << "input: S1, S2 or S3 and press Enter\n"; getline(cin, S); map<string, string>::iterator it; //Объявили итератор it = m.find(S); //Проверили существование ключа if (it != m.end()){ cout << it -> second; //выводим значение } else { //как default у switch cout << "???\n"; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
//C++ Листинг #1.4 выбор из множества функций map #include <iostream> #include <map> #include <utility> using namespace std; void f1(){ cout << "func f1\n"; } void f2(){ cout << "func f2\n"; } void f3(){ cout << "func f3\n"; } int main() { map<string, void(*)()> m; string S; m.insert(pair<string, void(*)()>("S1", f1)); m.insert(pair<string, void(*)()>("S2", f2)); m.insert(pair<string, void(*)()>("S3", f3)); cout << "input: S1, S2 or S3 and press Enter\n"; getline(cin, S); map<string, void(*)()>::iterator it; //Объявили итератор it = m.find(S); //Проверили существование ключа if (it != m.end()){ it -> second(); //выводим значение } else { //как default у switch cout << "???\n"; } } |
Добавить комментарий