-1

私が得た:

「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==、2つのインスタンスの比較を実行しましたm_numberが、同じ要素を設定detectedObjectsして含む場合、期待どおりに空の結果セットではなくすべての要素を返します。trackedObjectsm_numberstd::set_difference

compareテンプレート引数としてセットに機能オブジェクトを与えようとさえしましたが、その結果、適切に定義されていないこと=について多くのコンパイラエラーが発生しました。!=

何が問題なのかしら?

4

1 に答える 1

2

オブジェクト自体ではなくオブジェクトへのポインタを格納している理由がわかりません。

コンパレータを使用するには、設定したすべてのインスタンス同じコンパレータタイプを提供していることを確認する必要がありますset_difference

set<Compound_object*, compare> m_trackedObjects;

set<Compound_object*, compare> detectedObjects;
set<Compound_object*, compare> deleteFromTrackedObjects;
set_difference(detectedObjects.begin(), detectedObjects.end(),
    this->m_trackedObjects.begin(), this->m_trackedObjects.end(),
    inserter(addToTrackedObjects, addToTrackedObjects.end()),
    compare());
于 2012-08-24T09:27:31.040 に答える