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;  
}  
Logo

GitCode AI社区是一款由 GitCode 团队打造的智能助手,AI大模型社区、提供国内外头部大模型及数据集服务。

更多推荐