Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 哈希表,其中键是字符串,值是c++;_C++_Hash - Fatal编程技术网

C++ 哈希表,其中键是字符串,值是c++;

C++ 哈希表,其中键是字符串,值是c++;,c++,hash,C++,Hash,是否可以实现哈希,其中键是String,值是function。作为背景,我有一个程序,其中有很多字符串比较,即 if(strcasecmp(s,"london")==0) functionA(); else if(strcasecmp(s,"moscow")==0) functionB(); else if(strcasecmp(s,"delhi")==0) functionC(); ... 等等 但是这种实现非常昂贵,因为对所有if语句都进行了比较

是否可以实现哈希,其中键是
String
,值是
function
。作为背景,我有一个程序,其中有很多字符串比较,即

if(strcasecmp(s,"london")==0) 
   functionA();  
else if(strcasecmp(s,"moscow")==0)
   functionB();  
else if(strcasecmp(s,"delhi")==0)  
   functionC();  
  ...  
等等

但是这种实现非常昂贵,因为对所有if语句都进行了比较。如果我们有一个hash实现,其中key是
String
,value是
function
,我们可以调用

function = hash.Get("moscow");    
function(); 
它的复杂度很好
(theta(log(1))

有可能这样做吗

是否可能有一个哈希的实现,其中键是String 价值就是功能

对。这是完全可行的。您可以使用指向函数的指针或
std::function
。可能的容器可能是:

  • std::无序图
  • boost::无序的_映射

  • std::map
    就是你要找的。或者
    std::unordered\u map
    ,如果复杂性应该是
    O(1)
    和哈希
    O(m)