을 사용하여 실수를 찾을 수 없습니다 내가 가지고 :는 set_difference 알고리즘
"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()));
}
문제 설명 : 난 m_number
으로하는 두 인스턴스을 비교 한이 을 행한다 operator<
및 operator==
구현되지만 세트 detectedObjects
및 trackedObjects
동일한 m_number
와 요소의 std::set_difference
복귀 를 포함 할 때 모든 요소가 예상대로 빈 결과 집합 대신 사용됩니다.
나는 함수 객체 compare
을 템플릿 인수로 설정하려고했지만 심지어 결과적으로 =
과 !=
에 대한 컴파일러 오류가 많이 발생하여 제대로 정의되지 않았습니다.
무엇이 문제일까요?
코드를 게시하시기 바랍니다 :
당신이set_difference
로 설정 인스턴스의 모든과에 동일한 비교 유형을 제공하고 있는지 확인해야합니다, 비교기를 사용하려면 ('m_number' 대'm_numberOfObject', 멤버가 아닌 함수에서는'this'), 최소한으로 유지하십시오 (어떤 것이'compare'입니까?). 들여 쓰기. – avakar관련된 typedef를 이해하기가 어려울 수도 있지만 선언문에서 객체 자체보다는 객체에 _pointers_가 포함되어있는 것으로 보입니다. 이 경우 객체 클래스의 일부로 정의 된'operator < '는 적용되지 않습니다. – jogojapan
@ jogojapan, 네, 고마워요, 합리적인 것 같아요. 나는 그것에 관심을 기울이지 않았습니다. 그래서 나는 적절한 클래스를 비교 자로 정의하고 그것을 set에 대한 인자로 명시 할 필요가 있는가? 그러나 내가 그 "=", "! ="을 정의하지 못하게하는 이유는 내 비교 클래스를 집합에 대한 인수로 제공하는 동안 무엇입니까? –