P1056 排座椅(map中value排序)
map中本身是key排序#include<iostream>#include<algorithm>#include<stdio.h>#include <vector>#include<string>#include<map>#include <functional> // std::greateru...
·
map中本身是key排序
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include <vector>
#include<string>
#include<map>
#include <functional> // std::greater
using namespace std;
bool cmp(const pair<string, int>& a, const pair<string, int>& b) {
return a.second < b.second;
}
int main()
{
//1、map这里指定less作为其默认比较函数(对象),就是默认按键值升序排列
map<string, int> name_score_map;
name_score_map["LiMin"] = 90;
name_score_map["ZiLinMi"] = 79;
name_score_map["BoB"] = 92;
name_score_map.insert(make_pair("Bing", 99));
name_score_map.insert(make_pair("Albert", 86));
//输出添加的内容
map<string, int>::iterator iter;
for (iter = name_score_map.begin(); iter != name_score_map.end(); ++iter) {
cout << (*iter).first << endl;
}
cout << endl;
// 将map中的内容转存到vector中
vector<pair<string, int> > vec(name_score_map.begin(), name_score_map.end());
//对线性的vector进行排序
sort(vec.begin(), vec.end(), cmp);
for (int i = 0; i < vec.size(); ++i)
cout << vec[i].first << endl;
system("pause");
return 0;
}
P1056 排座椅
其实也不用map这么麻烦,用个结构存就行,一个放本身的值(如a[1]=1),l另一个放出现的次数。当时没想起来,还绕了这么多,不过当学习一下stl也好。
#include<map>
#include<vector>
#include<vector>
#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp_value(const pair<int,int>& a,const pair<int,int>& b){
return a.second>b.second;
}
bool cmp_key(const pair<int,int>& a,const pair<int,int>& b){
return a.first<b.first;
}
int main()
{
int i,m,n,k,l,d,/*a[10005],b[10005],*/x,y,x1,y1,a1=0,b1=0;
map<int,int>a;
map<int,int>b;
scanf("%d %d %d %d %d",&m,&n,&k,&l,&d);
while(d--){
scanf("%d %d %d %d",&x,&y,&x1,&y1);
if(x==x1) {
int t=y<y1?y:y1;
b[t]++;
}
else {
int t=x<x1?x:x1;
a[t]++;
}
}
vector<pair<int,int> > v1(a.begin(),a.end());
vector<pair<int,int> > v2(b.begin(),b.end());
sort(v1.begin(),v1.end(),cmp_value);
sort(v2.begin(),v2.end(),cmp_value);
sort(v1.begin(),v1.begin()+k,cmp_key);
sort(v2.begin(),v2.begin()+l,cmp_key);
for(i=0;i<k;i++){
if(i) printf(" ");
printf("%d",v1[i].first);
}
printf("\n");
for(i=0;i<l;i++){
if(i) printf(" ");
printf("%d",v2[i].first);
}
return 0;
}
更多推荐



所有评论(0)