Seb*_*wak 8 c++ stl unordered-map shared-ptr c++11
我正在使用外部网络库,它返回一些代表打开的套接字的魔术结构,文档说当将它们插入STL容器时,应该使用它们进行比较std::owner_less
.
std::map<MagicStructure, std::shared_ptr<Client>, std::owner_less<MagicStructure>> sockets;
Run Code Online (Sandbox Code Playgroud)
不过我想unordered_map
改用.我该怎么做?std::owner_less
是一个比较器,它对哈希映射没用.挖掘源代码,MagicStructure
似乎是一个typedef std::shared_ptr
.
不幸的是,您似乎必须使用map
, 并且不能用于unordered_map
这种情况:http://wg21.cmeerw.net/lwg/issue1406
任何用户定义的方式都无法提供对基于所有权的等价关系的哈希支持,因为用户根本无法获得有关所有权共享的信息。因此,提供基于所有权的哈希支持的唯一方法是通过标准库侵入式地提供它。
换句话说,get()
在 a 中存储(由 返回)和拥有的指针(当引用计数达到 0 时删除):http shared_ptr
: //www.cplusplus.com/reference/memory/shared_ptr/get/。为了在 中使用拥有的指针unordered_map
,您需要基于拥有的指针hash()
和equals()
操作。但STL中没有提供它们。并且您无法自己实现它们(无需重新实现shared_ptr
和更改 的定义MagicStructure
),因为拥有的指针不是由 公开的shared_ptr
。
归档时间: |
|
查看次数: |
488 次 |
最近记录: |