gpt4 book ai didi

c++ - std::hash_set 中定义的 stdext::hash_value() 的性能

转载 作者:行者123 更新时间:2023-11-28 07:19:34 24 4
gpt4 key购买 nike

首先,我想告诉你,我的总体/主要目标是使用函数名(字符串)作为参数来执行某些函数,我定义了一个函数如下:(我想为每个作为函数参数插入的字符串数据生成一个唯一的数字)

    #include <iostream>
#include <string>
#include <hash_set>

using namespace std;
void Func_Execution(string &s){
int k=stdext::hash_value(s);
#if(_MSC_VER ==1500)
switch (k)
{
case -336300864: GETBATTERYCALLSIGNS();
break;
case -1859542241:GETGUNIDS();
break;
case 323320073:Foo(); // here int k=323320073 for string s="Foo"
break;
case 478877555:Bar();
break;
defalut :Exit();
break;
}
#endif
}

这里我调用 Func_Execution 函数如下:

void main(){
string s="Foo";
Func_Execution(s);
}

我想知道是否有任何高效(考虑到性能/耗时)和有效的机制来为特定字符串(字符模式)生成唯一数值而不是使用 stdext::hash_value() 函数?(另请注意我也想实现 switch-case)

最佳答案

你有没有考虑过类似的事情

#include <functional>
#include <iostream>
#include <unordered_map>
#include <string>

using std::cout;
using std::endl;
using std::function;
using std::string;
using std::unordered_map;

class Registry {
public:
static void Execute(const string& function) {
if (functions_.find(function) != functions_.end()) {
functions_[function]();
}
}
static int Register(const string& function_name, function<void()> f) {
functions_.emplace(function_name, f);
return functions_.size();
}
static void Dump() {
for (auto& i : functions_) {
cout << i.first << endl;
}
}
private:
Registry() {};
static unordered_map<string, function<void()>> functions_;
};

unordered_map<string, function<void()>> Registry::functions_;

#define REGISTER_FUNCTION(F) \
namespace { \
const int REGISTERED__##F = Registry::Register(#F, &F); \
}

void foo() {
cout << "foo" << endl;
}

REGISTER_FUNCTION(foo);

void bar() {
cout << "bar" << endl;
}

REGISTER_FUNCTION(bar);

int main() {
Registry::Execute("foo");
Registry::Execute("foo");
Registry::Execute("unknown");
Registry::Dump();
return 0;
}

它应该适合您的用例。我只是一起破解它,某处可能有一个错误,但它编译并运行 (c++11)。

关于c++ - std::hash_set 中定义的 stdext::hash_value() 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19699133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com