Как использовать слабый_птр в tbb::concurrent_unordered_map?

Я использую tbb::concurrent_unordered_map заменить std::map в моей программе так:

Before:

class KvSubTable;
typedef std::weak_ptr<KvSubTable> KvSubTableId;
std::map<KvSubTableId, int, std::owner_less<KvSubTableId> > mEntryMap;

Теперь я использую tbb::concurrent_unordered_map заменить std::map, но есть некоторые ошибки компиляции:

tbb::concurrent_unordered_map<KvSubTableId, int, tbb::tbb_hash<KvSubTableId>, std::owner_less<KvSubTableId> > mEntryMap;

cpp / ext / amd64 / include / tbb / internal / _tbb_hash_compare_impl.h: 66: 37: ошибка: недопустимый static_cast для типа 'const std::weak_ptr' для типа 'std:: size_t
{aka long unsigned int} '
return static_cast (t) * internal:: hash_multiplier;

Я пробовал некоторые решения, как это, но это не работает:

template <typename T>
inline bool operator==(const std::weak_ptr<T>& t, const std::weak_ptr<T>& u)
{
    return !t.owner_before(u) && !u.owner_before(t);
}

Итак, как это может работать, пожалуйста, помогите....

1 ответ

Вам нужно определить хеш-функцию для std::weak_ptr, Вы можете найти пример в тестах для библиотеки TBB.

Другие вопросы по тегам