【发布时间】:2015-10-01 09:47:51
【问题描述】:
我正在使用外部网络库,它返回一些代表打开的套接字的魔术结构,文档说当将它们插入 STL 容器时,应该使用 std::owner_less 比较它们。
std::map<MagicStructure, std::shared_ptr<Client>, std::owner_less<MagicStructure>> sockets;
但是我想改用unordered_map。我该怎么做? std::owner_less 是一个比较器,它对哈希映射毫无用处。挖掘源代码,MagicStructure 似乎是std::shared_ptr 的类型定义。
【问题讨论】:
-
这可能是标准的真正遗漏。我们需要像
owner_equal和owner_hash这样的东西;后者可以是控制块地址的哈希值。 -
你可以查看源代码,看看他们是否设置了删除器,如果设置了,是什么类型。然后尝试
get_deleter。可能deleter可以用作“所有者”的代理。
标签: c++ c++11 stl shared-ptr unordered-map