怎样在cmp中修改原结构体的值?(帮我debugQAQ))
查看原帖
怎样在cmp中修改原结构体的值?(帮我debugQAQ))
772488
LeiSZ楼主2025/1/21 21:24
#include<bits/stdc++.h>
using namespace std;
struct stu{
	int num,sum,cm,h;
	int pm;
	bool tong;
}a[10001];
int n,c,m,e;

bool cmp1(stu a,stu b){
	if(a.num!=b.num) return a.sum>b.sum;
	else if(a.cm!=b.cm) return a.cm>b.cm;
	else if(a.h!=b.h) return a.h>b.h;
	else{
		if(a.num<b.num)
			b.tong=1;//这里有问题
		else
			a.tong=1;
		return a.num<b.num;
	}
}
bool cmp2(stu a,stu b){
	return a.num<b.num;
}

int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>c>>m>>e;
		a[i].num=i;
		a[i].sum=c+m+e;
		a[i].cm=c+m;
		a[i].h=max(c,m);
	}
	sort(a+1,a+n+1,cmp1);
	
	//for(int i=1;i<=n;i++) cout<<a[i].sum<<' ';
	
	for(int i=1;i<=n;i++){
		a[i].pm=i;
	}
	sort(a+1,a+n+1,cmp2);
	int k;
	for(int i=1;i<=n;i++){
		if(a[i].tong==0){
			cout<<a[i].pm<<endl;
			k=a[i].pm;
		}else{
			cout<<k<<endl;
		}
	}
	return 0;
}

拿问问了人机,人机说cmp中不能直接修改结构体的tong值,但人机没给有效的解决方法
:(\

附人机原话:
在 cmp1 函数中,对于 a.tong 和 b.tong 的修改会导致未定义行为,因为这两个变量是结构体中的成员,并且是按值传递给 cmp1 的,修改不会影响原结构体中的值,这样的修改没有意义。

2025/1/21 21:24
加载中...