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