// Метки case типа const char*
#include <iostream>
#include <string>
using namespace std;
// Обсуждение проблемы
// https://stackoverflow.com/questions/2111667/compile-time-string-hashing
// Решение проблемы
// https://github.com/manuelgustavo/cx_hash/blob/master/cx_hash/cx_hash.cpp
constexpr size_t cx_hash(const char* input) {
size_t hash = sizeof(size_t) == 8 ? 0xcbf29ce484222325 : 0x811c9dc5;
const size_t prime = sizeof(size_t) == 8 ? 0x00000100000001b3 : 0x01000193;
while (*input) {
hash ^= static_cast<size_t>(*input);
hash *= prime;
++input;
}
return hash;
}
int main() {
system("chcp 1251 > nul");
const size_t four = 4;
while (true) {
cout << "word: ";
string word;
cin >> word;
switch (cx_hash(word.c_str())) {
case cx_hash("one"): puts("1"); break;
case cx_hash("two"): puts("2"); break;
case cx_hash("three"): puts("3"); break;
case cx_hash("четыре"): puts("4"); break;
default: puts("other");
}
}
system("pause > nul");
}
unordered_map <string, int> mapa;
mapa["hello"] = 3;
mapa["like"] = 1;
...
string str;
cin >> str;
switch(mapa.contain(str)?mapa[str]:0)
{
case 3: cout "Вы ввели hello"; break;
case 1: cout "Вы ввели лайк"; break;
...
}