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;
提前感谢您的帮助。
答案 0 :(得分:4)
vector
不接受仿函数,所以你不能。
vector
有两个模板参数:要存储的对象类型和要使用的分配器(分配器是可选的;默认情况下它将使用std::allocator<T>
)。
有序关联容器(例如map
和set
)允许您指定比较函数,因为它们是有序容器:它们必须将元素保留在某些容器中顺序。
如果你想保持矢量元素的排序,你需要自己对它们进行排序,或者将每个新元素插入到矢量中的正确位置,使它始终保持排序或者在完成插入后对矢量进行排序元素。或者,您可以使用其中一个有序的关联容器,例如set
。
答案 1 :(得分:0)
vector
不是已排序的容器,因此不接受比较类型。
我认为你正在寻找std::set<Vehicle*,CompareCatId>* m_vehiclesVector;