gpt4 book ai didi

c++ - 使用 vector 中的对象排序

转载 作者:行者123 更新时间:2023-11-28 03:28:04 27 4
gpt4 key购买 nike

我想修改以下代码,以便我可以使用对象进行排序。在对返回单个值的单个方法进行排序时,当前代码很好。如何使用返回对象的方法来实现;

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() 方法返回一个 Point2D 对象,其中包含 int x 和 int y 的值;

最佳答案

AFAICS,您可以保留您的代码。您唯一必须定义的是 Point2D 或您要返回的任何对象的比较运算符:

class Point2D {
public:
friend bool operator<(const Point2D &p1, const Point2D &p2) { ...; }
...
};

您还可以删除您的method_comparer 类,只提供适当的比较器函数进行排序:

bool compare_line_points(const Line2D &l1, const Line2D &l2) {
return l1.getPt1() < l2.getPt1();
}

std::sort(vec_l2d.begin(), vec_l2d.end(), compare_line_points);

根据您的要求,这些只是一堆一行或两行。无需模板。

关于c++ - 使用 vector 中的对象排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13394871/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com