1.map
#include<iostream>
#include<map>
using namespace std;
int main(){
map<char,int>mp;
mp['c']=10;
mp['b']=20;
mp['a']=30;
map<char,int>::iterator it=mp.begin();
for(map<char,int>::iterator it=mp.begin();it !=mp.end();it++){
printf("%c %d",it->first,it->second);
}
}
map不能用(it+i)的形式,只有vector和string可以
同时map会以键从小到大的顺序自动排序,map内部是由红黑树实现的
2.queue(先进先出)
只能通过front()和back()访问queue的头尾元素
3.priority_queue(优先队列)
优先队列中没有front back 只有top能访问元素
(1)优先级的设定
1.基本数据类型:
当为int double char型时,优先级为数字大的优先
priority_queue<int> q;
priority_queue<int,vector<int>,less<int> > q; //数字越大 优先级越大
priority_queue<int,vector<int>,greater<int> > q;//数字越小 优先级越大
//注意queue中的类型要保证一直
priority_queue<fruit,vector<fruit>,greater<fruit> > q;
例程如下:
#include<iostream>
#include<queue>
#include<string>
using namespace std;
struct fruit{
string name;
int price;
friend bool operator <(fruit f1,fruit f2){ //重载>会报错
return f1.price>f2.price;
}
}f4,f5,f6;
int main(){
priority_queue<fruit> q;
f4.name='a';
f5.name='b';
f6.name='c';
f4.price=1;
f5.price=0;
f6.price=100;
q.push(f4);
q.push(f5);
q.push(f6);
cout << q.top().name << " " << q.top().price << endl;
}
*/
/*
#include<iostream>
#include<queue>
#include<string>
using namespace std;
struct fruit{
string name;
int price;
}f4,f5,f6;
struct cmp{
bool operator ()(fruit f1,fruit f2){
return f1.price>f2.price;
}
};
int main(){
priority_queue<fruit,vector<fruit>,cmp> q;
f4.name='a';
f5.name='b';
f6.name='c';
f4.price=1;
f5.price=0;
f6.price=100;
q.push(f4);
q.push(f5);
q.push(f6);
cout << q.top().name << " " << q.top().price << endl;
}