2

いくつかのGUIDがあり、それらをすばやく取得するためにハッシュテーブルを実装したいと思います。どうすればいいですか?

GUIDをハッシュコードとして扱う場合は、次のようなことを行う必要があります。

index = GUID % prime_number_that_covers_all_GUID_bits

しかし、これが正しい方法かどうかはわかりません。このようなハッシュテーブルを実現するにはどうすればよいですか?

4

1 に答える 1

2

の場合はタイプ()std::unordered_mapをとるタイプと、ユーザー情報またはプログラム情報(アプリによって異なります)のタイプを使用できます。格納は、メンバー関数を呼び出すのと同じくらい簡単です。または、格納された値の検索は、を呼び出すことによって行われます。KeyGUIDValueinsert()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での出力

于 2013-01-21T12:49:41.873 に答える