我想修改下面的代碼,以便我可以使用對象進行排序。 排序返回單個值的單個方法時,當前的代碼很好。 如何使用返回對象的方法實現;使用向量排序使用對象
template<typename T, typename M, template<typename> class C = std::less>
struct method_comparer : std::binary_function<T, T, bool>
{
explicit method_comparer(M (T::*p)() const) : p_(p) { }
bool operator()(T const& lhs, T const& rhs) const
{
return C<M>()((lhs.*p_)(), (rhs.*p_)());
}
private:
M (T::*p_)() const;
};
template<typename T, typename M>
method_comparer<T, M> make_method_comparer(M (T::*p)() const)
{
return method_comparer<T, M>(p);
}
template<template<typename> class C, typename T, typename M>
method_comparer<T, M, C> make_method_comparer2(M (T::*p)() const)
{
return method_comparer<T, M, C>(p);
}
Main.cpp的
// works well
std::sort(vec_p2d.begin(),vec_p2d.end(),make_method_comparer(&Point2D::getX));
//想實現此
std::sort(vec_l2d.begin(),vec_l2d.end(),make_method_comparer(&Line2D::getPt1));
getPt1()方法返回其包含對於int x和INT y中的值的Point2D對象;
僅僅爲你的類實現一個小的單行'運算符<'是不是更容易? –
@JoachimPileborg我正在使用4個不同的citiera對4個不同的類進行排序,我使用的是模板。使通用。 –
@JoachimPileborg或者我可以只是實現一個不同的功能只是爲了比較對象 –