Я пытаюсь создать хэш-карту, которая будет отображать std::string
в std::string
, до сих пор я использовал следующий код: Используйте libcds SplitListMap с стандом :: струнных
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>
?
Ссылаясь на этот вопрос, вы могли бы привести пример того, как инициализировать эту карту в основной функции и добавить один элемент? Я также искал в документации, просто записывая 'int2int_map name;' вызывает для меня исключение (ссылаясь на пример, приведенный в документе). –