算法基础 篇2(常用容器) 下

1.map

<1>定义

map是关联容器,用来存储键值对,是键到值的一个映射

键可以理解为pair中的左值   值可以理解为pair中的右值

注:键是不重复的,通过键可以找到值

<2>初始化:

map<类型,类型>   起个名字

<3>几个初始化的例子:

map<int,string> mymap={{1,"Apple"},{2,"banana"}};

<4>访问和遍历:

1°通过下标:

map<int,string> mymap={{1,"Apple"},{2,"banana"},{9,"csbn"}};
mymap[1]就是apple;
mymap[9]就是csbn;

注:这个下标不是数组里的下标,而是此处的键

2°通过迭代器:

map<int,string> mymap={{1,"Apple"},{2,"banana"}};
map<int,string> ::iterator it;
for(it=mymap.begin();it!=mymap.end();it++)
cout<<it->first<<' '<<it->second<<'\n';

<5>有关函数:

①find

②erase

③size

④clear

#include<bits/stdc++.h>
using namespace std;
int main(){
	map<int,string> mymap={{1,"Apple"},{2,"banana"}};
	map<int,string> ::iterator it;
	cout<<mymap.size()<<'\n'; //结果为2,有两个键值对 
	for(it=mymap.begin();it!=mymap.end();it++)
		cout<<it->first<<' '<<it->second<<'\n';
	mymap.erase(2); //删掉以2为键的键值对 
	for(it=mymap.begin();it!=mymap.end();it++)
		cout<<it->first<<' '<<it->second<<'\n'; //删完后只有1和Apple这个键值对 
	cout<<mymap.find(1)->first<<' '<<mymap.find(1)->second;  //查找返回的是1这个键所在键值对的迭代器,分别用first和second输出键和值 
	return 0;
}

2.queue

<1>定义:

队列:一种先进先出的线性表,允许插入的一端为队尾,允许删除的一端为队头

<2>初始化(优先队列,按一定优先级排列):

1°升序队列:又叫大根堆,堆顶为最大值(即默认升序)

priority_queue<int> q;

2°降序队列:又叫小根堆,堆顶为最小值

priority_queue<int,vector<int>,greater<int>> q;

<3>有关函数:

push():从队尾插入元素

pop():弹出队首

front():返回队首元素

back():返回队尾元素

empty():判断是否为空

size():元素个数

top():取堆顶

<4>函数应用

#include<bits/stdc++.h>
using namespace std;
int main(){
	priority_queue<int> q;
	for(int i=0;i<10;i++)
		q.push(i+1);
	cout<<q.size()<<'\n';
	cout<<q.empty()<<'\n';
	cout<<q.top()<<'\n';
	q.pop();
	cout<<q.top()<<'\n';
	while(!q.empty()){
		q.pop();
		cout<<q.top()<<'\n';	
	}
	return 0;
}

3.stack

<1>定义

后进先出 栈

类似于:后进电梯的人先出来(这里也可以理解后面的数据结构具体实现,就是想要电梯里面先进去的人出来就要先把后进去的人拿出来才能让里面的人先出来,然后再把刚才拿出来的后进去的人放回去,因为他现在还不想出来)

<2>初始化

stack<类型> 起个名字;

<3>相关函数:

push()

pop()

top()

empty()

size()

上面有,就不写功能了QAQ

<4>函数例子

#include<bits/stdc++.h>
using namespace std;
int main(){
	stack<int> s;
	for(int i=0;i<10;i++)
		s.push(i+1);
	cout<<s.size()<<'\n'; //10
	cout<<s.empty()<<'\n'; //0
	cout<<s.top()<<'\n';  //10
	s.pop();
	cout<<s.top()<<'\n'; //9
	if(!s.empty()){
		s.pop();
		cout<<s.top()<<'\n';	//8
	}
	return 0;
}
  • 22
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值