C++ unordered_set shared_ptr搜索原始指针
c++ unordered_set with shared_ptr search for raw pointer
我有一个unordered_set,shared_ptrs作为键。这在 99% 中工作正常,但在同样的情况下,我需要从类内部搜索集合,并且我想避免继承enable_shared_from_this,正因为如此。
我可以/如何通过原始指针搜索shared_ptr unordered_set。
get()
哈希shared_ptr
哈希并比较shared_ptr
比较get()
,因此让我们使用别名构造函数创建一个非拥有shared_ptr
:
std::shared_ptr<T> key(std::shared_ptr<T>(),
this /* or whatever pointer you want to search for */);
并用它搜索unordered_set
。
与使用 null 删除器相比,这更便宜,因为它不分配控制块。
不,unordered_set
没有允许您基于Key
类型的实际实例以外的任何内容进行搜索的函数。
但是,shared_ptr<T>
具有3个重要功能,可以使您获得所需的效果:
-
std::hash<shared_ptr<T>>
被定义为等效于哈希T*
。 -
std::shared_ptr
的operator==
比较了基于shared_ptr::get
的指针。 -
您可以创建一个具有删除程序的
shared_ptr
,该删除器实际上不会删除对象。
因此,您可以创建一个人造shared_ptr
:
T *ptr = this;
auto sp = shared_ptr<T>(ptr, [](T*) {} );
auto it = the_set.find(sp);
只要sp
没有逃脱你的范围(你真的不想把它留在身边(,你就会没事的。
相关文章:
- 有根的二进制搜索树.保留与其父级的链接
- 在C++中搜索嵌套多映射值
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 二进制搜索树叶数问题
- 为什么二进制搜索在我的测试中不起作用
- 将浮动的heightmap数组导出为16位原始值
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 正在尝试重载二进制搜索树分配运算符
- c++binary_search函数排序数组(流行名称搜索)出现问题
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 向量上的线性搜索
- 如何在动态数组上使用搜索函数
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- cmake:添加要搜索头文件的目录
- 使用C++创建特殊的二叉搜索树
- 为什么我的原始二叉搜索树被修改,即使我在另一个节点中复制了根节点
- C++ unordered_set shared_ptr搜索原始指针
- 转到原始解决方案中复制的解决方案中的定义搜索
- 哪些情况会导致对c++代码进行原始变量的简单搜索失败?