いくつかの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での出力