ich tbb::concurrent_unordered_map
bin mit std::map
in meinem Programm wie folgt zu ersetzen:Wie man weak_ptr in tbb :: concurrent_unordered_map verwendet?
Before:
class KvSubTable;
typedef std::weak_ptr<KvSubTable> KvSubTableId;
std::map<KvSubTableId, int, std::owner_less<KvSubTableId> > mEntryMap;
Jetzt benutze ich tbb::concurrent_unordered_map
, std::map
zu ersetzen, aber es hat einige Fehler kompilieren:
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;
Ich habe versuchen Sie einige Lösungen wie folgt, aber es funktioniert nicht:
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);
}
So
, wie es funktionieren kann, bitte helfen ....
** Ungeordnete ** Karte ist keine Karte und erfordert eine Hash-Funktion. Sie sollten auch eine [mcve] zur Verfügung stellen –