Sto usando una libreria di rete esterna che restituisce alcune strutture magiche che rappresentano socket aperti e i documenti dicono che quando li si inserisce in contenitori STL, devono essere confrontati usando std::owner_less
.C++ 11 unordered_set con std :: owner_less-like hashing
std::map<MagicStructure, std::shared_ptr<Client>, std::owner_less<MagicStructure>> sockets;
Tuttavia mi piacerebbe utilizzare unordered_map
invece. Come posso farlo? std::owner_less
è un comparatore ed è inutile per una mappa hash. Digitando il codice sorgente, MagicStructure
sembra un typedef per std::shared_ptr
.
Questa potrebbe essere una vera e propria omissione dallo standard. Avremmo bisogno di qualcosa come 'owner_equal' e' owner_hash'; quest'ultimo potrebbe essere l'hash dell'indirizzo del blocco di controllo. –
Si potrebbe guardare il codice sorgente e vedere se impostano un deleter e, in caso affermativo, di quale tipo. Quindi prova 'get_deleter'. Probabilmente il 'deleter' può essere usato come proxy per il" proprietario ". – Yakk