我定义了一个班级
class Rent { public: int s_time, duration, price, e_time; Rent(int s, int d, int p) { s_time = s; duration = d; price = p; e_time = s + d; } bool operator<(Rent const &r1) { return e_time < r1.e_time; } };
希望根据对其进行排序e_time
,因此我已经定义<
了Rent
,但是,我不断收到错误消息
rent.cpp:38:12: error: no match for ‘operator+’ (operand types are ‘std::vector’ and ‘int’) sort(R, R+n); ^
当我尝试的时候sort(R, R+n);
。R
是类型的向量,Rent
并且n
是整数(向量的大小)。
除上述以外,我尝试了这两种方法,但仍然失败!
sort(R, R + sizeof(R)/sizeof(R[0])); sort(R.begin(), R.end());
我用google搜索了lambdas的一些解决方案,但是sort()的第二个参数再次是int + custom_datatype类型。
任何帮助都会很棒。
sort(R, R+n); sort(R, R + sizeof(R)/sizeof(R[0]));
如果R
类型为,将不起作用std::vector
。这些行有两个问题:
operator+()
没有为定义std::vector
。
编译器期望该operator<()
函数是const
成员函数。
您可以operator<()
通过使其成为const
成员函数来修复该函数。
bool operator<(Rent const &r1) const // ^^^^^ { return e_time < r1.e_time; }
那仍然不能解决第一个问题。
但是,您应该可以使用:
sort(R.begin(), R.end());
之后。
从理论上讲,您不必使该operator<()
函数成为非const
成员函数。看看http://en.cppreference.com/w/cpp/algorithm/sort。请参阅comp
参数说明。它说:
比较函数的签名应等效于以下内容:
bool cmp(const Type1 &a, const Type2 &b);签名不需要具有
const &
,但是功能对象一定不能修改传递给它的对象。
但是,并非所有的编译器都遵守。他们希望函数的签名能够与const
对象一起使用。