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有两个模板参数:要存储的对象的类型和要使用的分配器(分配器是可选的;默认情况下它将使用std::allocator<T>)。

有序的关联容器(例如mapset)允许您指定一个比较函数,因为它们是有序的容器:它们必须以某种顺序保持其元素。

如果要保持向量的元素排序,则需要自己对它们进行排序,方法是将每个新元素插入向量中的正确位置以使其始终保持排序,或者在完成插入元素后对向量进行排序。或者,您可以使用其中一个有序的关联容器,例如set.

于 2010-09-20T14:33:31.367 回答
0

vector不是排序容器,因此不接受比较类型。

我想你正在寻找std::set<Vehicle*,CompareCatId>* m_vehiclesVector;

于 2010-09-20T14:37:18.900 回答