我有几个GUID,我想实现一个哈希表来快速检索它们。我该怎么做?
如果我将GUID视为哈希码,我需要执行类似
的操作index = GUID % prime_number_that_covers_all_GUID_bits
但我不确定这是否是正确的方法。我该怎么做才能实现这样的哈希表?
答案 0 :(得分:0)
您可以使用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();
}
上的输出