STL:集合、映射、优先队列

1.集合(set)

1.1 特点:集合中的元素不可以重复,因此集合可以自动去重,而且还会自动排序。另外一个特点是:集合的增删改查比普通数组快。它的时间复杂度为O(log(n))。

1.2 操作

1.3 示例

#include <bits/stdc++.h>
using namespace std;
int main()
{
	set<int>s;
	set<int>::iterator it;
	s.insert(1);
	s.insert(2);
	s.insert(3);
	s.insert(1);
	cout<<"set的size值为:"<<s.size()<<endl;
	cout<<"set的maxsize的值为:"<<s.max_size()<<endl;
	cout<<"set中的第一个元素是:"<<*s.begin()<<endl;
	cout<<"set中的最后一个元素是:"<<*s.end()<<endl;
	it=s.find(2);
	if(it!=s.end())
	{
		cout<<*it<<endl;
	}
	else
	{
		cout<<"not find it "<<endl;
	}
	s.clear();
	if(s.empty())
	{
		cout<<"set为空!!!"<<endl; 
	}
	cout<<"set的size值为:"<<s.size()<<endl;
	cout<<"set的maxsize的值为:"<<s.max_size()<<endl;	
	return 0;
}

2.映射(map)

2.1 特点:指两个集合之间相互对应的关系,它弥补了普通数组的缺陷(下标只能是正整数)它的下标可以是任意类型。集合的第一个元素为关键字,第二个元素为值。关键字必须唯一,值不一定唯一。

2.2 操作

2.3 示例

#include <bits/stdc++.h>
using namespace std;
int main()
{
	map<string, int>dict;
	dict["Tom"]=1;
	dict["Jone"]=2;
	dict.insert(map<string, int>:: value_type("Mary",1));
	if(dict.count("Mary"))
	{
		printf("Mary is in class %d\n",dict["Mary"]);
	}
	else
	{
		printf("Mary has no class ");
	}
	for(map<string,int>::iterator it=dict.begin(); it !=dict.end();++it)
	{
		cout<<it->first<<"is in class"<<it->second<<endl;
	}
	dict.clear();
	return 0;
}

3.优先队列(priority_queue)

3.1 特点

3.1.1 大顶堆 :父亲>=孩子

3.1.2 小顶堆:父亲<孩子

3.1.3 优先队列的底层是由小顶堆大顶堆来实现的。

3.1.4 优先队列的队首一定是最大值最小值,插入一个数会自动排序,删除一个数也会自动排序。 

3.2 操作

3.3 示例

#include <bits/stdc++.h>
using namespace std;
//priority_queue<int> q;//第一种定义方法,默认为大顶堆 
priority_queue<int, vector<int>, less<int> > q;//第二种定义方法,大顶堆  
//priority_queue<int, vector<int>, greater<int> > q;//第三种定义方法,小顶堆 
int main()
{
	q.push(6);
	q.push(3);
	q.push(5);
	q.push(1);
	q.push(2);
	
	while(!q.empty())
	{
		cout<<q.top()<<endl;
		q.pop();
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值