L2-021 结构体排序
L2-021
点赞狂魔
知识点:结构体排序
把结构体储存在vector中,写cmp函数进行操作
cmp可以写出主关键字和次关键字
注意:
- 每次要初始化map
- 次关键词字储存用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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步