2017-12-28 6 views
0

私はこのように私のプログラムでstd::mapを交換するtbb::concurrent_unordered_mapを使用しています:今tbb :: concurrent_unordered_mapでweak_ptrを使用するには?

Before: 

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

、私はstd::mapを置き換えるためにtbb::concurrent_unordered_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: error: invalid static_cast from type 'const std::weak_ptr' to type '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); 
} 

どうすればうまくいくのですか。

+2

**無秩序な**地図は地図ではなく、ハッシュ関数が必要です。また、[mcve] –

答えて

0

std::weak_ptrのハッシュ関数を定義する必要があります。あなたはTBBライブラリのテストでthe exampleを見つけることができます。

関連する問題