拓展:优先队列+pair+二维map(6)

优先队列

本来打算自己写的,但是有人已经写了,所以大家直接看这篇吧!
看这里,点这里
优先队列在稍微高级的题里面基本都会用到,所以建议读者认真学。

pair

看这里,点这里
pair的基本用法得会,虽然现在还用不到,其实也能用到,就像STL容器里的map和pair。更重要的是,在以后图论的存图中,pair会频繁的用到,所以读者还是得好好学。
补充:
pair是一个结构体,有first和second 两个域,可以直接访问,而make_pair是返回一个pair <类型,类型>的数据

	pair<string,int> pill;
	pill=make_pair("mitao",520);
	//pair<string,int> pill("mitao",520); 可以直接初始化 
	cout<<pill.first<<" "<<pill.second ;
	//结果都是mitao 520

当map和pair相遇时:

#include <bits/stdc++.h>  
using namespace std;  
int main()  
{  
    map<string,int> Map;  //声明一个map容器
    map<string,int> ::iterator it;  //声明一个 迭代器
    Map.insert(pair<string,int>("root",12));  
    Map.insert(pair<string,int>("scot",11));  
    for(it=Map.begin();it!=Map.end();it++)  
        cout<<it->first<<"   "<<it->second<<endl; 
	//运行结果: 
	//root    12
	//scot    11


    it=Map.begin();  
    Map.erase(it);//通过迭代器删除  
    string key="root";  
    Map.erase(key);//通过key删除  
    Map.erase(Map.begin(),Map.end());//一个迭代器,到另一个迭代器  
    //相当于  Map.clear();  
  
    for(it=Map.begin();it!=Map.end();it++)  
        cout<<it->first<<"    "<<it->second<<endl;  
    return 0;  
}

再看一个二维map
水果 HDU - 1263

#include<iostream>
#include<map>
#include<cstring>
using namespace std;
int main()
{
    int T;
    cin>>T;
    while(T--)
	{
        map<string,map<string,int> > m;
        string a,b ;
        int n,num;
        cin>>n;
        while(n--)
		{
            cin>>a>>b>>num;
            m[b][a]+=num;
        }
        map<string,map<string,int> >::iterator it_1;
        map<string,int >::iterator it_2;
        for(it_1=m.begin();it_1!=m.end();it_1++)
		{
            cout<<it_1->first<<endl;
            for(it_2=it_1->second.begin();it_2!=it_1->second.end();it_2++)
			{
                cout << "   |----" << it_2->first << "(" << it_2->second << ")" <<endl;
            }
        }
        if(T!=0) cout<<endl;
 
    }
    return 0;
}
发布了41 篇原创文章 · 获赞 5 · 访问量 2283

猜你喜欢

转载自blog.csdn.net/mumuhaoshuai/article/details/100533265