Ich verwende externe Netzwerkbibliothek, die einige magische Strukturen zurückgibt, die geöffnete Sockets darstellen, und die Dokumente sagen, dass sie beim Einfügen in STL-Container mit std::owner_less
verglichen werden sollten.C++ 11 unordered_set mit std :: owner_less-like hashing
std::map<MagicStructure, std::shared_ptr<Client>, std::owner_less<MagicStructure>> sockets;
Allerdings würde ich stattdessen unordered_map
verwenden. Wie kann ich es tun? std::owner_less
ist ein Komparator und es ist nutzlos für eine Hash-Karte. Beim Eingeben des Quellcodes scheint MagicStructure
ein typedef für std::shared_ptr
zu sein.
Dies kann eine echte Unterlassung aus dem Standard sein. Wir brauchen etwas wie "owner_equal" und "owner_hash"; Letzteres könnte der Hash der Adresse des Steuerblocks sein. –
Sie könnten den Quellcode anschauen und sehen, ob sie einen Deleter setzen, und wenn ja, welchen Typ. Dann versuche 'get_deleter'. Möglicherweise kann der 'Deleter' als Proxy für den" Eigentümer "verwendet werden. – Yakk