如何使用仿函数定义矢量

时间:2010-09-20 14:29:40

标签: c++ stl vector functor

嘿,我实现了以下仿函数:

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;

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

vector不接受仿函数,所以你不能。

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

有序关联容器(例如mapset)允许您指定比较函数,因为它们是有序容器:它们必须将元素保留在某些容器中顺序。

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

答案 1 :(得分:0)

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

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