0

std::stringにマップされるハッシュマップを作成しようとしましたがstd::string、これまでのところ次のコードを使用しました:

template<typename TKey, typename TValue>
struct lockfree_hash_map_traits_t
    : public cds::container::split_list::type_traits 
{

    typedef cds::container::michael_list_tag  ordered_list    ;   // what type of ordered list we want to use
    typedef std::hash<TKey>                   hash            ;   // hash functor for the key stored in split-list map

    // Type traits for our MichaelList class
    struct ordered_list_traits: public cds::container::michael_list::type_traits {
        typedef std::less<TKey> less;   // comparer that specifies order of list nodes
    };
};

template<typename TKey, typename TValue>
class lockfree_hash_map_t { 
public:
    typedef
        cds::container::SplitListMap<cds::gc::HP, TKey, TValue, lockfree_hash_map_traits_t<TKey, TValue> > 
        base_hash_map;

// ... some stuff
private:
    base_hash_map _map;
};

これは libcds のドキュメントに基づいています。しかし、ハッシュマップを正しく使用しているかどうかはわかりません... SplitListMap の基になるリストを説明する論文によると、キーのハッシュでソートする必要がありますが、ドキュメントでは std::less<TKey>マイケルリストの順序を指定するために使用することを提案しています。の使い方はstd::less<std::string>正しいですか?

4

1 に答える 1

0

ハッシュマップの通常の方法です。ハッシュ関数は、異なるキーに対して 1 つのハッシュ コードを生成できます。衝突といいます。キーを検索するとき、キーのハッシュを計算し、マップでこのハッシュを検索し (通常、ハッシュはハッシュ テーブルの単なるインデックスです)、見つかったアイテムのキーをキーと比較します。したがって、 std::less が必要です。

于 2013-09-22T17:47:07.533 に答える