gpt4 book ai didi

c++ - 将 std::string 散列为 std::size_t 以外的东西

转载 作者:行者123 更新时间:2023-12-01 14:50:57 26 4
gpt4 key购买 nike

作为我目前正在进行的项目的一部分,我需要使用几个相对较短的字符串(例如“ABCD1234”)作为自定义容器的键。问题是,这个容器中的对象属于其“主键”可以说是数字的类型。所以我需要获取给我的唯一字符串,将它们翻译成数字,并确保我保留唯一性。

我一直在尝试使用 boost::hash,虽然我认为它会起作用,但我对哈希值最终有多大感到恼火,尤其是考虑到我知道我我将从短字符串开始。

有没有我可以使用的其他库,本地的或第三方的?这显然是一件方便的事情,所以我不太担心,但我想我还是问问吧。

最佳答案

您可以编写自己的返回一个短的,但这很容易发生冲突。

这是我修改后返回短/16 位的一个。可能需要一些调整。

unsigned short hash( std::string const& s ) {
short results = 3;
for ( auto current = s.begin(); current != s.end(); ++ current ) {
unsigned char c = static_cast<unsigned char>( *current );
results = results + ((results) << 5) + *(c + i) + ((*(c + i)) << 7);
i++;
}
return ((results) ^ (results >> 16)) & 0xffff;
}

另外,如果你提前知道你的 key 是什么,而且 key 不多,你可以研究一个完美的散列

关于c++ - 将 std::string 散列为 std::size_t 以外的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29171279/

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