gpt4 book ai didi

c++ - 在 C++ 中排序不匹配 'operator+'

转载 作者:搜寻专家 更新时间:2023-10-30 23:54:55 24 4
gpt4 key购买 nike

我定义了一个类

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<Rent>’ and ‘int’)

sort(R, R+n);
^

当我尝试 sort(R, R+n); . RRent 类型的 vector 和 n是整数( vector 的大小)。

除此之外,我还尝试了这两种方式,还是失败了!

sort(R, R + sizeof(R)/sizeof(R[0]));
sort(R.begin(), R.end());

我在谷歌上搜索并找到了一些使用 lambda 的解决方案,但 sort() 的第二个参数仍然是 int + custom_datatype 类型。

任何帮助都会很棒。

最佳答案

sort(R, R+n);
sort(R, R + sizeof(R)/sizeof(R[0]));

如果 R 将不起作用类型为 std::vector<Rent> .这些行有两个问题:

  1. operator+()没有为 std::vector 定义.
  2. 编译器期望 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 的说明争论。它说:

The signature of the comparison function should be equivalent to the following:

bool cmp(const Type1 &a, const Type2 &b);

The signature does not need to have const &, but the function object must not modify the objects passed to it.

然而,并不是所有的编译器都遵守这一点。他们希望函数的签名能够与 const 一起工作。对象。

关于c++ - 在 C++ 中排序不匹配 'operator+',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34604130/

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