自己调试了下 问题出现在第二次比较时 会莫名出现一个全为空的成员 不知道该咋改 麻烦各位大佬帮忙看看~感谢感谢
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
string zhim[7] = { "BangZhu","FuBangZhu","HuFa","ZhangLao","TangZhu" ,"JingYing","BangZhong" };
struct chengYuan {
string name;
string zhiwei;
long long int gong;
int grade;
int xu;
}xingyue[110];
int n;
map<string, int> zhiwam;
bool cmp1(chengYuan x1, chengYuan x2) {
return x1.gong == x2.gong ? x1.xu<x2.xu : x1.gong>x2.gong;
}
bool cmp2(chengYuan x1, chengYuan x2) {
if (x1.zhiwei == x2.zhiwei) {
if (x1.grade == x2.grade) return x1.xu < x2.xu;
else return x1.grade < x2.grade;
}else
return zhiwam[x1.zhiwei] < zhiwam[x2.zhiwei];
}
int main() {
cin >> n;
for (int i = 0; i < 7; i++) {
zhiwam[zhim[i]] = i;//初始化map
}
for (int i = 0; i < n; i++) {
cin >> xingyue[i].name >> xingyue[i].zhiwei >> xingyue[i].gong >> xingyue[i].grade;
xingyue[i].xu = i;
}
sort(xingyue + 4, xingyue + 1 + n, cmp1);//排序完
for (int i = 3; i < n; i++) {//附新职位
if (i >= 3 && i <= 4) xingyue[i].zhiwei = zhim[2];
else if (i >= 5 && i <= 8) xingyue[i].zhiwei = zhim[3];
else if (i >= 9 && i <= 15) xingyue[i].zhiwei = zhim[4];
else if (i >= 16 && i <= 40) xingyue[i].zhiwei = zhim[5];
else if (i >= 41) xingyue[i].zhiwei = zhim[6];
}
sort(xingyue + 1, xingyue+1 + n , cmp2);
for (int i = 0; i < n; i++) {
cout << xingyue[i].name << " " << xingyue[i].zhiwei << " " << xingyue[i].grade << endl;
}
return 0;
}