【发布时间】:2013-11-23 04:49:58
【问题描述】:
这是我第一次使用 std::set 容器,操作符 std::less 有问题。
我声明集合:
std::set<MyClass*, std::less<MyClass> > _set;
然后,我为 MyClass 重载 operator ;问题似乎与类和指针之间的混合有关,因为我有这个错误消息:
no match for call to '(std::less<MyClass>) (MyClass *const&, MyClass *const&)'
【问题讨论】:
-
任何使用原始指针容器的设计都被破坏了。您的问题只是另一个证明,因为它甚至让您感到困惑。
-
只是
std::set<MyClass> myClassSet; -
@Griwes 那是错误的。将原始指针作为映射类型的
std::map是std::map更常见的用法之一。 -
你不能使用
std::less<MyClass>,因为它不是用来比较MyCLass*s的函数。相反,您应该编写自己的比较函数...struct Cmp { bool operator()(const MyClass* p_lhs, const MyClass* p_rhs) const { return *p_lhs < *p_rhs; } };并将其指定为set的第二个模板参数。 -
@Griwes Off hand(并且没有看到他的代码的任何其他内容),我确实怀疑这里的正确答案是使用值。由于像 Java 这样的语言,大量 C++ 初学者在不应该使用动态分配的情况下确实使用了动态分配。在这种情况下,正确的答案是使用值,而不是用智能指针模拟Java的垃圾收集。一旦你消除了这些情况,智能指针的情况就几乎消失了。几乎所有带有指针的关联容器都用于导航。
标签: c++ set std operator-keyword