首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串与哈希作为映射键-性能

字符串与哈希作为映射键-性能
EN

Stack Overflow用户
提问于 2015-01-17 15:04:18
回答 2查看 1.2K关注 0票数 2

目前我的游戏引擎写日志系统。

为了保持清晰,我必须给出每个Logger对象的名称。记录器对象存储在LogManager类中,该类跟踪每个Logger实例。Map存储指向Logger实例的指针,就像key使用代表名称的std::string一样。

我正在开发实时3D引擎,所以减少延迟是非常重要的。所以我想出了第二种存储方法--使用快速哈希算法(用于ex )。MurMur哈希3),并且只存储64位哈希而不是字符串。

现在,我的问题是:使用哈希而不是字符串作为映射键值在运行时(在我的和全局情况下)性能更好吗?

@Edit访问代码

代码语言:javascript
复制
    std::map<std::string, CLogger*> map1;
std::map<QWORD, CLogger*> map2;

// access :
CLogger * logger = map1["root"];
CLogger * logger = map2[getHashedString("root")];

//

QWORD getHashedString(const std::string string)
{
    QWORD val = 0;
    hash_x64_128(string.c_str(), string.length(), 1234, &val);
    return val;
}

上面使用的算法是MurMur Hash 3 (dev/MurmurHash3.cpp)

诚挚的问候。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-17 15:25:50

很确定的。但是,请确保生成的哈希代码是唯一的。性能的提高也取决于您正在使用的映射实现。例如,stl::map使用搜索树来存储密钥。在这种情况下,您可以保存大量的字符串比较。如果使用的是stl::unordered_map,则会获得更少的收益,因为它已经使用了哈希值。但是,如果您聪明地这样做,仍然可以在散列计算上保存一些运行时。

一件非常重要的事情:测量优化前后的运行时;)

票数 1
EN

Stack Overflow用户

发布于 2015-01-17 15:19:03

你能提供一些访问地图的代码吗?

计算您自己的散列和让访问器计算哈希之间的区别在于,可能通过使用您自己的散列,map的哈希参数将成为标识函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28000756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档