0

ねえ、私は次のファンクターを実装しました:

struct CompareCatId : public std::binary_function<Vehicle*, Vehicle*, bool>
{
    bool operator()(Vehicle* x, Vehicle* y) const
    {   
        if(x->GetVehicleType() > y->GetVehicleType())
            return true;
        else if (x->GetVehicleType() == y->GetVehicleType() && x->GetLicenseNumber() > y->GetLicenseNumber())
            return true;
        else
            return false;
    }
};

ベクトルを次のように定義しようとすると、多くのエラーが発生します。

vector<Vehicle*,CompareCatId>* m_vehiclesVector;

よろしくお願いします。

4

2 に答える 2

4

vectorファンクターを取らないので、できません。

vectorには、格納するオブジェクトのタイプと使用するアロケータの 2 つのテンプレート パラメータがあります (アロケータはオプションです。デフォルトでは を使用しますstd::allocator<T>)。

順序付けられた連想コンテナー (mapおよび などset) を使用すると、比較関数を指定できます。これは、順序付けられたコンテナーであるためです。要素を何らかの順序で保持する必要があります。

ベクトルの要素をソートしたままにしたい場合は、常にソートされたままになるように新しい各要素をベクトルの正しい位置に挿入するか、要素の挿入が完了した後にベクトルをソートすることにより、自分でソートする必要があります。または、 のような順序付けられた連想コンテナーの 1 つを使用することもできますset

于 2010-09-20T14:33:31.367 に答える
0

vectorはソートされたコンテナーではないため、比較型を受け入れません。

探していると思いますstd::set<Vehicle*,CompareCatId>* m_vehiclesVector;

于 2010-09-20T14:37:18.900 に答える