Это не элегантное, но если вы хотите быстро, то вы можете сделать подготовленный unordered_map сделать поиск, который будет полезен, если эта функция будет называться 100s раза (расточительно, если редко называется). В идеале вы можете сделать этот контейнер в объекте класса, а не в глобальной переменной, а тип возвращаемого значения - целочисленным значением, а не строкой. Это приведет к поиску O (1) со стоимостью, находящейся в хешировании ключа. Но я не знаю ваших требований.
Если вы предпочитаете звонить один раз, сделайте так, как предположил Йоахим Пилеборг, и выполните серию вызовов std :: find, пока не получите хит.
#include <iostream>
#include <unordered_map>
#include <string>
std::unordered_map< std::string, std::string > g_map;
std::string arr1[] = {"a", "b", "c"};
std::string arr2[] = {"d", "e", "f"};
std::string arr3[] = {"g", "h", "i"};
std::string arr4[] = {"j", "k", "l"};
const char * map_value(const std::string & input)
{
std::unordered_map< std::string, std::string >::iterator iter(g_map.find(input));
return iter == g_map.end() ? "NOT FOUND" : iter->second.c_str();
}
int main(int argc, char ** argv)
{
// Build the map;
for(int i = 0; i < sizeof(arr1)/sizeof(std::string); ++i)
g_map[arr1[i]] = "TYPE_1";
for(int i = 0; i < sizeof(arr2)/sizeof(std::string); ++i)
g_map[arr2[i]] = "TYPE_2";
for(int i = 0; i < sizeof(arr3)/sizeof(std::string); ++i)
g_map[arr3[i]] = "TYPE_3";
for(int i = 0; i < sizeof(arr4)/sizeof(std::string); ++i)
g_map[arr4[i]] = "TYPE_4";
std::string input;
std::cout << map_value("b") << std::endl;
std::cout << map_value("z") << std::endl;
std::cout << map_value("eb") << std::endl;
std::cout << map_value("j") << std::endl;
std::cout << map_value("f") << std::endl;
return 0;
}
Выход:
TYPE_1
NOT FOUND
NOT FOUND
TYPE_4
TYPE_2
Чтение о [ 'станд :: find'] (http://en.cppreference.com/w/cpp/algorithm/find) должен быть хорошим началом. –
Я забыл сказать, что я не хочу делать это с большим количеством, если иначе. потому что у меня много массивов. – user2956536
Должна ли быть функция или вы можете создать экземпляр класса? –