c++ - 如何简单地调整指针的集合或映射排序谓词

标签 c++ set std shared-ptr

这个问题一定有一个简单的答案......

我有一个 std::set 或一个 std::map 或一些具有自然排序的对象类型 - 比如 std::less。

我需要更改我的集合或映射以包含共享指针而不是 T 的拷贝。

所以我想要这样的东西:

using my_set std::set<std::shared_ptr<T>, std::less<*T>>;

但是对于如何指定“在 T 的 ____ 适配器上使用 less 适配器,以便它在取消引用的成员上,而不是在共享指针上!”,我还是一片空白。

有没有std::less<std::dereference<std::shared_ptr<T>>>等价?

最佳答案

目前 C++ 标准库中没有仿函数可以实现您想要的功能。您可以编写自定义比较器,或者如果您经常需要此功能,请提供一个间接/取消引用函数对象。

相关且可能有帮助的主题;第一个为许多运算符(operator)提供了通用解决方案(即使它需要一些代码):

关于c++ - 如何简单地调整指针的集合或映射排序谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39960165/

相关文章:

c++ - gcc5.1 的新 libstdc++ 可能会分配大堆内存

Java Get/Set 方法返回 null

c++ - STL中有 "magic"吗?

c++ - std::set 使用不同数据结构的实现

c++ - 需要帮助来理解 "ABA"问题

c++ - 在 Arduino 库的文件夹中包含一个文件

c++ - 带有提示的 std::unordered_map 插入

C++设置以对为键的排序

Python- 在对象列表上使用集合 <class 'xyz.models.abc' >

c++ - auto f = bind(dist<>,gen) 在 C++ 成员声明中失败。不被识别为函数