2022-03-05 23:37阅读: 28评论: 0推荐: 0

L2-021 结构体排序

L2-021

点赞狂魔

知识点:结构体排序

把结构体储存在vector中,写cmp函数进行操作

cmp可以写出主关键字和次关键字

注意:

  1. 每次要初始化map
  2. 次关键词字储存用double,并且在结构体中既可以储存下标又可以储存double(这里选择了储存下标)
#include<bits/stdc++.h>
using namespace std;
struct edge{
unsigned int size;
string name;
int pos;
};
vector<double>ans(1001);
typedef pair<int,string > PII;
bool cmp(edge a,edge b)
{
if(a.size>b.size)
{
return true;
}
else if(a.size==b.size)
{
return ans[a.pos]<ans[b.pos];
}else
{
return false;
}
}
signed main()
{
int t;
cin>>t;
set<int>se[t+1];
vector<string>a(t+1);
char ch='\0';
int num=0;
int o;
for(int i=1;i<=t;i++)
{
map<int,int>ma;
cin>>a[i];
cin>>o;
while((ch=getchar())!='\n')
{
cin>>num;
se[i].insert(num);
ma[num]++;
}
for(auto it:se[i])
{
ans[i]=ans[i]+ma[it];
}
// cout<<se[i].size()<<" "<<ans[i]<<endl;
ans[i]=ans[i]/(float)se[i].size();
// cout<<ans[i]<<" ";
// cout<<se[i].size()<<" ";
// cout<<endl;
}
vector<edge>b(t+1);
for(int i=1;i<=t;i++)
{
b[i]={se[i].size(),a[i],i};
}
sort(b.begin()+1,b.end(),cmp);
if(t>=3)
for(int i=1;i<=3;i++)
{
if(i!=3)
cout<<b[i].name<<" ";
else if(i==3)
{
cout<<b[i].name;
}
}
else
{
for(int i=1;i<=t;i++)
{
if(i!=t)
cout<<b[i].name<<" ";
else
{
cout<<b[i].name;
}
}
}
if(t==1)
{
cout<<" - -";
}else if(t==2)
{
cout<<" -";
}
}

本文作者:TimMCBen

本文链接:https://www.cnblogs.com/TimMCBen/p/15969944.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   TimMCBen  阅读(28)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.