Использование строки * в качестве ключа в unordered_set - PullRequest
1 голос
/ 26 июля 2010

Я бы хотел использовать строку * в качестве ключа в списке unordered_list. Я не хочу хеш самого указателя, но строку, на которую он указывает.

Я понимаю, что мне нужно создать такую ​​структуру:

struct myhash{
    size_t operator()(const string * str){
        return hash(*str);
    }
}

и отправьте его в качестве хэша в шаблон карты, но я не уверен, как.

1 Ответ

2 голосов
/ 26 июля 2010

Вот и все.Затем вы предоставляете его в качестве третьего параметра шаблона для типа unordered_map (который я буду считать C ++ 0x).Я бы обобщил это так, чтобы его можно было использовать в любой ситуации, а не просто string:

struct dereference_hash
{
    template <typename T>
    std::size_t operator()(const T* pX)
    {
        return std::hash<T>()(*pX);
    }
};

typedef std::unordered_map<std::string*, int, dereference_hash> map_type;
...