cmp函数报错
#include <iostream>#include <cmath>
#include <algorithm>
using namespace std;
int n, m, e, code, bujige = 0, shang = 0;
struct chengji{
int s = -1;
}cj;
bool cmp(chengji a, chengji b){
if (a.s == b.s){
return true;
}
return a.s > b.s;
}
int main() {
cin >> n >> m;
for(int i=1;i<=n;i++){
cin >> e;
}
for(int i=1;i<=m;i++){
cin >> code;
cin >> cj.s;
if(cj.s < 60){
bujige++;
}
}
sort(cj, cj + m);
for(int i=0;i<=m;i++){
if(cj.s != -1){
shang++;
}else{
break;
}
}
cout << n - shang << endl << bujige;
return 0;
}
cmp函数报错,为啥呀? 在这段代码中,cmp函数报错是因为它的返回类型应该是bool,但是你的cmp函数返回了true。这是不正确的。
在这里,你的cmp函数应该返回一个布尔值,表示a是否小于b。如果a小于b,返回true;如果a大于等于b,返回false。修改后的cmp函数如下所示:
bool cmp(chengji a, chengji b){
return a.s < b.s;
}
另外,你在调用sort函数时,应该传入的是cj数组的起始位置和结束位置,而不是m。因此,你应该将 sort(cj, cj + m); 修改为 sort(cj, cj + n + 1, cmp); 。
修改后的代码如下所示:
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int n, m, e, code, bujige = 0, shang = 0;
struct chengji{
int s = -1;
}cj;
bool cmp(chengji a, chengji b){
return a.s < b.s;
}
int main() {
cin >> n >> m;
for(int i=1;i<=n;i++){
cin >> e[ i];
}
for(int i=1;i<=m;i++){
cin >> code;
cin >> cj.s;
if(cj.s < 60){
bujige++;
}
}
sort(cj, cj + n + 1, cmp);
for(int i=0;i<=n;i++){
if(cj[ i].s != -1){
shang++;
}else{
break;
}
}
cout << n - shang << endl << bujige;
return 0;
}
希望这可以帮助到你! 根据你提供的代码,cmp函数报错的原因是在使用sort函数时,无法正确地解析cmp函数。这是因为你的比较函数cmp不符合sort函数要求的格式。
在C++中,比较函数应该是一个具有两个参数并返回bool类型的函数。然而,你的cmp函数定义为bool cmp(chengji a, chengji b),其中参数类型为chengji,而不是标准的类型(例如int、float等)或其指针。
要修复这个问题,你可以将cmp函数更改为接受两个参数的指针,并修改对应的比较逻辑。修正后的代码如下:
bool cmp(const chengji* a, const chengji* b) {
if (a->s == b->s) {
return true;
}
return a->s > b->s;
}
另外,还需要将sort函数的第二个参数改为排序范围的结束位置,即cj + m改为cj + shang。修正后的代码如下:
sort(cj, cj + shang, cmp);
通过以上修改,你的代码应该能够正确编译和执行了。请注意,修改后的代码还存在其他潜在问题,如数组越界、未初始化变量等,请确保你的代码逻辑正确并做好错误处理。
如果问题已经解决,请设置最佳答案 isdkz 发表于 2023-8-13 10:46
在这段代码中,cmp函数报错是因为它的返回类型应该是bool,但是你的cmp函数返回了true。这是不正确的。
...
不对啊 sort没用对
sort(cj, cj + m, cmp);
页:
[1]