c++ - 在使用 std::set 时重载运算符 <

标签 c++ set std operator-keyword

这是我第一次使用 std::set 容器,我对运算符 std::less 有疑问。

我声明集合:

std::set<MyClass*, std::less<MyClass> > _set;

然后,我为 MyClass 重载了运算符<;问题似乎与类和指针的混合有关,因为我有这个错误消息:

no match for call to '(std::less<MyClass>) (MyClass *const&, MyClass *const&)'

最佳答案

你重载了 operator<对于 MyClass , 但你的集合有指向 MyClass指针 .

简单的答案是不使用指针。如果您觉得必须使用指针,那么答案就是为您的集合编写自定义比较器。

struct Comp
{
    bool operator()(MyClass* x, MyClass* y);
};

std::set<MyClass*, Comp> _set;

关于c++ - 在使用 std::set 时重载运算符 <,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19905449/

相关文章:

haskell - 将集合并集实现为幺半群

java - Java中NavigableSet、SortedSet和TreeSet的区别

c++ - std::make_unique 可以与抽象接口(interface)一起使用吗?

c++ - 访问 unordered_maps 作为指针

c++ - 如何在 C++ 中获取 Windows 7 中所有电源方案的名称?

c++ - 64 位 C++ 中的 sizeof(long)

c++ - 为什么 "The one ranges proposal"包含每个 View 的两个名称是否有特定原因?

java - 在 Java 中创建、搜索和修改(key、value1、value2)的最佳方式

c - 裸机环境下类似 stdlib 的库? (内存管理和希望 pthread 支持)

c++ - MS Windows 和 Linux 之间的 Calloc 差异?