gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:19:51 24 4
gpt4 key购买 nike

目前我正在为我的游戏引擎编写日志系统。

为了让一切都清楚,我必须为每个 Logger 对象命名。Logger 对象存储在 LogManager 类中,该类跟踪每个 Logger 实例。Map 正在存储指向 Logger 实例的指针,因为 key 使用代表名称的 std::string。

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

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

@编辑访问代码

    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 ( https://code.google.com/p/smhasher/source/browse/branches/chandlerc_dev/MurmurHash3.cpp )

最好的问候。

最佳答案

当然。但要确保生成的哈希码是唯一的。性能增益还取决于您使用的 map 实现。例如 STL::map 使用搜索树来存储键。在这种情况下,您可以节省大量的字符串比较。如果您使用的是 STL::unordered_map,则 yield 会减少,因为它已经使用了哈希值。但是如果你巧妙地做到这一点,你仍然可以节省一些哈希计算的运行时间。

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

关于c++ - 字符串与哈希作为映射键 - 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28000756/

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