【发布时间】:2012-08-24 08:55:20
【问题描述】:
我明白了:
“object.h”
namespace objectNS
{
class object
{
public:
int m_number;
bool operator== (const object& object) const;
bool operator< (const object& object) const;
};
class compare
{
public:
bool operator ()(const object*, const object*) const;
};
}
“object.cpp”
#include "object.h"
typedef objectNS::object OBJECT;
bool OBJECT::operator== (const object &object) const
{
return this->m_number == object.m_number;
}
bool OBJECT::operator< (const object &object) const
{
return this->m_number < object.m_number;
}
bool objectNS::compare::operator() (const object* obj1, const object* obj2) const
{
return obj1->m_number > obj2->m_number;
}
我有一些函数,它适用于对象,
void f(void)
{
set<Compound_object*> detectedObjects;
set<Compound_object*> deleteFromTrackedObjects;
set_difference(detectedObjects.begin(), detectedObjects.end(), this->m_trackedObjects.begin(), this->m_trackedObjects.end(), inserter(addToTrackedObjects, addToTrackedObjects.end()));
}
问题描述:
我实现了operator< 和operator==,两个实例的比较由m_number 执行,但是当集合detectedObjects 和trackedObjects 包含具有相同m_number 的元素时, std::set_difference 返回 所有 元素,而不是预期的空结果集。
我什至尝试将函数对象 compare 作为模板参数赋给集合,但结果出现了很多关于 = 和 != 未正确定义的编译器错误。
不知道是什么问题?
【问题讨论】:
-
请发布我们可以编译的代码(
m_numbervsm_numberOfObject,this在非成员函数中),但保持最小化(compare的用途是什么?)。正确缩进。 -
可能涉及到一些难以理解的 typedef,但从您的声明来看,您的集合似乎包含指向对象的 指针,而不是对象本身。在这种情况下,定义为对象类一部分的
operator<将不会生效。 -
@jogojapan,是的,谢谢,听起来有道理,我没注意。所以我需要将适当的类定义为比较器并将其声明为 set 的参数?但是,在尝试将比较类作为参数提供给集合时,我得到那些“=”、“!=”没有定义的原因是什么?
标签: c++ stl operator-overloading set-difference stdset