我有两节课: 圆点
Class Circle包含一个Dot,而Dot包含一个int。 Circle具有getDot()函数,而Dot具有lessThan(Dot&)函数。
我想按Dot内的int值对Circles数组elems []进行排序。如果我有一个Circle圆要与数组中的某个值进行比较,则基本上需要执行以下操作的行:
elems[0].getDot().lessThan(circ.getDot())
但是它无法编译...我可以通过临时解决此问题
Dot dt = circ.getDot()
并通过
elems[0].getDot().lessThan(dt)
但是这似乎是不必要的复制。有没有更有效的方法来解决这个问题?
不幸的是,我仅限于使用lessThan(dot&)进行比较,但是我可以修改它的内容。
编译器错误为: 错误:无效类型'Dot'的右值的非常量引用'Dot&'的初始化cout <
答案 0 :(得分:1)
示例:
#include <vector>
#include <algorithm>
struct Dot
{
Dot(int i) : value_(i) {}
bool lessThan(Dot const& other) const
{
return value_ < other.value_;
}
int value_;
};
struct Circle
{
Circle(Dot dot = Dot(0))
: dot_(dot)
{
}
const Dot& getDot() const { return dot_; }
Dot dot_;
};
void sortCircles(std::vector<Circle>& circles)
{
auto order = [](Circle const& l, Circle const& r)
{
return l.getDot().lessThan(r.getDot());
};
std::sort(circles.begin(), circles.end(), order);
}