GUID和哈希表 - 如何使用它们?

时间:2013-01-21 12:28:39

标签: c++ c hash hashtable guid

我有几个GUID,我想实现一个哈希表来快速检索它们。我该怎么做?

如果我将GUID视为哈希码,我需要执行类似

的操作
index = GUID % prime_number_that_covers_all_GUID_bits

但我不确定这是否是正确的方法。我该怎么做才能实现这样的哈希表?

1 个答案:

答案 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();
}

LiveWorkSpace

上的输出