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

标签 c++ c hash hashtable guid

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

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

index = GUID % prime_number_that_covers_all_GUID_bits

但我不确定这是否是正确的方法。我应该如何实现这样的哈希表?

最佳答案

您可以使用std::unordered_map ,需要 Key在您的情况下输入( GUID ),然后输入 Value类型,可能是一些用户信息或程序信息(取决于您的应用程序)。存储就像调用成员函数 insert() 一样简单或emplace()并通过调用find()来查找存储的值。 .

下面的示例使用 std::string作为 key 的基础类型,并且隐式 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 上的输出

关于c++ - GUID 和哈希表 - 如何使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14438621/

相关文章:

mysql - 在 HASH 索引上插入带有 PRIMARY KEY 的表的时间复杂度

c++ - OpenCV 中的嘈杂色调

c++ - 为什么基指针值存储在堆栈中

c - C中的只读字符串

node.js - MD5 库的不同结果

c# - 如何用 Java 或 C# 创建快速 MD5 算法

c++ - 获取二进制文件的最后 n 位

c++ - 读取文件而不将整个文件读入内存

c - 如何在c中表示键(enter,shift,alt,space等)

c - 为什么我必须在指针上使用 free 而不是普通声明?