我有几个 GUID,我想实现一个哈希表来快速检索它们。我该怎么做?
如果我将 GUID 视为哈希码,我需要执行类似的操作
index = GUID % prime_number_that_covers_all_GUID_bits
但我不确定这是否是正确的方法。我应该怎么做才能实现这样的哈希表?
您可以使用std::unordered_map
,在您的情况下需要一个Key
类型 ( GUID
),以及一个Value
类型,它可能是一些用户信息或程序信息(取决于您的应用程序)。存储就像调用成员函数一样简单,insert()
或者emplace()
通过调用来查找存储的值find()
。
下面的示例std::string
用作键的基础类型,并隐式std::hash<std::string>
用作散列函数。对于其他 GUID 类型,您可能需要滚动自己的哈希函数对象并将其作为模板参数传递给哈希表。
#include <iostream>
#include <ios>
#include <string>
#include <unordered_map>
typedef std::string GUID;
class UserInfo
{
public:
UserInfo(bool b): is_genius_(b) {}
bool is_genius() const { return is_genius_; }
private:
bool is_genius_;
// your stuff here
};
int main()
{
std::unordered_map<GUID, UserInfo> table;
GUID x = "Johnny Pauling";
// insert into table
table.emplace(x, UserInfo(true));
// lookup in table
auto it = table.find(x);
// if found, print it
if (it != table.end())
std::cout << std::boolalpha << it->second.is_genius();
}
LiveWorkSpace上的输出