鱼C论坛

 找回密码
 立即注册
查看: 1412|回复: 4

[已解决]cmp函数报错

[复制链接]
发表于 2023-8-13 10:45:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int n, m, e[5002], code, bujige = 0, shang = 0;
struct chengji{
    int s = -1;
}cj[100000002];
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[i];
    }
    for(int i=1;i<=m;i++){
        cin >> code;
        cin >> cj[code].s;
        if(cj[code].s < 60){
            bujige++;
        }
    }
    sort(cj, cj + m);
    for(int i=0;i<=m;i++){
        if(cj[i].s != -1){
            shang++;
        }else{
            break;
        }
    }
    cout << n - shang << endl << bujige;
    return 0;
}
cmp函数报错,为啥呀?
最佳答案
2023-8-13 10:46:11
在这段代码中,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[5002], code, bujige = 0, shang = 0;
struct chengji{
    int s = -1;
}cj[100000002];
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[code].s;
        if(cj[code].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;
}

希望这可以帮助到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-13 10:46:11 | 显示全部楼层    本楼为最佳答案   
在这段代码中,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[5002], code, bujige = 0, shang = 0;
struct chengji{
    int s = -1;
}cj[100000002];
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[code].s;
        if(cj[code].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;
}

希望这可以帮助到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-13 10:46:31 | 显示全部楼层
根据你提供的代码,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);

通过以上修改,你的代码应该能够正确编译和执行了。请注意,修改后的代码还存在其他潜在问题,如数组越界、未初始化变量等,请确保你的代码逻辑正确并做好错误处理。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-13 11:12:50 | 显示全部楼层
isdkz 发表于 2023-8-13 10:46
在这段代码中,cmp函数报错是因为它的返回类型应该是bool,但是你的cmp函数返回了true。这是不正确的。

...

不对啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-13 11:32:45 | 显示全部楼层
sort没用对
sort(cj, cj + m, cmp);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 02:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表