哪位大神可以花几分钟帮我看看我最后那个排序为什么不对啊,我想好久了,麻烦了
  • 板块P1591 阶乘数码
  • 楼主wj_M
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/29 23:42
  • 上次更新2024/12/30 20:03:31
查看原帖
哪位大神可以花几分钟帮我看看我最后那个排序为什么不对啊,我想好久了,麻烦了
1610798
wj_M楼主2024/12/29 23:42
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>


class Member
{
public:
	string m_Name, m_Job;
	int m_Score, m_Level, m_Pos;
	Member(string name, string job, int s, int l, int pos)
	{
		this->m_Name = name;
		this->m_Job = job;
		this->m_Score = s;
		this->m_Level = l;
		this->m_Pos = pos;
	}
	void print()
	{
		cout << this->m_Name << " " << this->m_Job << " " << this->m_Level << endl;
	}
};
class My_Com1
{
public:
	bool operator()(Member& a, Member& b)
	{
		if (a.m_Pos == b.m_Pos)
			return a.m_Level > b.m_Level;
		return a.m_Pos < b.m_Pos;
		
	}
};
class My_Com2
{
public:
	bool operator()(Member& a, Member& b)
	{
		return a.m_Score > b.m_Score;
	}
};

int main()
{
	string a[8] = { "BangZhu","FuBangZhu","HuFa","ZhangLao","TangZhu","JingYing","BangZhong" };
	vector<Member>v;

	int n;
	cin >> n;
	string name, job;
	int score, level, pos;
	for (int i = 0; i < n; i++)
	{
		cin >> name >> job >> score >> level;
		for (int i = 0; i < 7; i++)
		{
			if (job == a[i]) pos = i;
		}
		Member m(name, job, score, level, pos);
		v.push_back(m);
	}
	//这个排序是让正副帮主靠前排,因为他们的职位不能改
	sort(v.begin(), v.end(), My_Com1());
	vector<Member>::iterator p = v.begin();
	for (vector<Member>::iterator it = v.begin(); it != v.end(); it++)
	{
		if (it->m_Pos != 0 && it->m_Pos != 1)
		{
			p = it;
			break;
		}
	}
	//这个排序是对除正副帮主外的所以有人按贡献从大到小排序
	sort(p, v.end(), My_Com2());
	for (int k = 0, i = 0; i < n; i++)
	{
		//修改职位
		if (v[i].m_Pos != 0 && v[i].m_Pos != 1)
		{
			if (k < 2) v[i].m_Job = a[2];
			else if (k < 6) v[i].m_Job = a[3];
			else if (k < 13) v[i].m_Job = a[4];
			else if (k < 38) v[i].m_Job = a[5];
			else v[i].m_Job = a[6];
			k++;
		}
	}
	cout << endl;
	//这个打印是我用来测试看看的,目前情况正常
	for (vector<Member>::iterator it = v.begin(); it != v.end(); it++)
	{
		it->print();
	}
	cout << endl;
	//到这里的排序就不对了,我看了好久还是找不到这个排序为什么不对,明明都分情况排序了
	sort(v.begin(), v.end(), My_Com1());
	for (vector<Member>::iterator it = v.begin(); it != v.end(); it++)
	{
		it->print();
	}
	return 0;
}
2024/12/29 23:42
加载中...