STL——map程序

 

 

/*
map:里面存在唯一的K-V;底层结构:红黑树
x:查找次数
N:数据总量
2^x>=N;查找非常方便,以为插入时,涉及到了排序。

multimap:可以存在多个相同的K-V;
set:键值和实值属于同一个值,存入了实值之后,会转换为键值,不允许重复
multiset:相对于set,是允许重复
*/
#include"iostream"
#include"map"
#include"algorithm"
#include"functional"
using namespace std;


void fun(pair<int,char> pr){
	cout<<pr.first<<pr.second<<endl;

}

void MapConstruct(){
	typedef pair<int,char> ins_pair;
	map<int,char> map1;
	//这个点比较关键:表示map的insert返回结果
	//一个值是迭代器,一个值bool
	//bool的输出:pr.second;
	//迭代器的输出:(*pr.first).first,(*pr.first).second
	//迭代器本身是一个地址指针
	pair<map<int,char>::iterator,bool> pr;

	map1.insert(pair<int,char>(1,'a'));
	pr = map1.insert(ins_pair(2,'b'));
	cout<<pr.second<<".............."<<( *pr.first).first<< (*pr.first).second<<endl;
	//ins_pair a = *(pr.first);
	//cout<<a.first<<a.second<<endl;
	pr = map1.insert(ins_pair(2,'b'));

	map1.insert(ins_pair(8,'b'));
	map1.insert(ins_pair(7,'b')) ;
	map1.insert(ins_pair(5,'b'));
	map1.insert(ins_pair(13,'b'));
	map<int,char>::iterator ite1 = map1.begin();
	ite1++;
	ite1++;
	ite1++;
	ite1++;
	map1.insert(ins_pair(12,'b'));

	for_each(map1.begin(),map1.end(),fun);
	cout<<"....................."<<endl;
	map<int,char> map2;
	map2.insert(ins_pair(20,'c'));
	map2.insert(map1.begin(),map1.end());

	for_each(map2.begin(),map2.end(),fun);

}
void MapOther(){
	typedef pair<int,char> input_pair;
	map<int,char> map1;
	map1.insert(input_pair(1,'a'));
	map1.insert(input_pair(2,'b'));
	map1.insert(input_pair(3,'c'));
	map1.insert(input_pair(4,'d'));
	map1.insert(input_pair(5,'e'));
	map1.insert(input_pair(6,'f'));
	cout<<map1.size()<<endl;
	//判断键值是否存在,填写key
	cout<<map1.count(5)<<endl;
	cout<<map1.empty()<<endl;
	map<int,char>::iterator ite1;
	ite1 = map1.begin();
	for(ite1;ite1!=map1.end();ite1++){
		cout<<ite1->first<<ite1->second<<endl;

	}

}
/*
增:insert
删:erase,clear
改:find(key) 返回迭代器
查:for_each
map 不允许修改键值
容器.end()永远指向元素的下一个位置
*/
void MapDelete(){
	typedef pair<int ,char> input_pair;
	map<int,char>map1;
	map1.insert(input_pair(1,'a'));
	map1.insert(input_pair(2,'b'));
	map1.insert(input_pair(3,'c'));
	map1.insert(input_pair(4,'d'));
	map1.insert(input_pair(5,'e'));
	map<int,char>::iterator ite1;
	ite1 = map1.begin();
	ite1++;
	ite1++;
	//根据迭代器的location
	//map1.erase(ite1);
	map1.erase(ite1++,map1.end());//根据迭代器的location
	map1.erase(1);//根据key 来删除
	ite1 = map1.begin();

	for(ite1;ite1!=map1.end();ite1++){

		cout<<ite1->first<<ite1->second<<endl;


	}

	map<int,char>map2;
	map2.insert(input_pair(1,'a'));
	map2.insert(input_pair(2,'b'));
	map2.insert(input_pair(3,'c'));
	map2.insert(input_pair(4,'d'));
	map2.insert(input_pair(5,'e'));
	map<int,char>::iterator ite2 = map2.find(1);
	cout<<ite2->first<<ite2->second<<endl;
	//容器.end()永远指向元素的下一个位置
	if(map2.find(100)==map2.end()){

		cout<<"ok"<<endl;
	}

	cout<<ite2->first<<ite2->second<<endl;


	//map默认从小到大排序,这个更改看如何更改排序的方式
	cout<<"............................"<<endl;
	map<int,char,greater<int>> map3;
	map<int,char,greater<int>>::iterator ite3;
	map3.insert(input_pair(1,'a'));
	map3.insert(input_pair(2,'b'));
	map3.insert(input_pair(3,'c'));
	map3.insert(input_pair(41,'d'));
	map3.insert(input_pair(25,'e'));
	map3.insert(input_pair(13,'f'));
	ite3 = map3.begin();

	for(ite3;ite3!=map3.end();ite3++){
		cout<<ite3->first<<ite3->second<<endl;
	}
	cout<<"...........lower_bound................."<<endl;

	ite3 = map3.lower_bound(12);
	cout<<ite3->first<<ite3->second<<endl;


	cout<<"...........upper_bound................."<<endl;

	ite3 = map3.upper_bound(12);
	cout<<ite3->first<<ite3->second<<endl;

	/*
	lower_bound(key)返回一个迭代器
	当排序方式为:从小到大,指向map中键值>=key的第一个元素
	当排序方式为:从大到小,指向map中键值<=key的第一个元素

	upper_bound(key)返回一个迭代器
	当排序方式为:从小到大,指向map中键值>key的第一个元素。
	当排序方式为:从大到小,指向map中键值<key的第一个元素。

	*/


	cout<<"............................"<<endl;
	map<int,char> map4;
	map<int,char>::iterator ite4;
	map4.insert(input_pair(1,'a'));
	map4.insert(input_pair(2,'b'));
	map4.insert(input_pair(3,'c'));
	map4.insert(input_pair(41,'d'));
	map4.insert(input_pair(25,'e'));
	map4.insert(input_pair(13,'f'));
	ite4 = map4.begin();

	for(ite4;ite4!=map4.end();ite4++){
		cout<<ite4->first<<ite4->second<<endl;
	}
	cout<<"...........lower_bound................."<<endl;

	ite4 = map4.lower_bound(12);
	cout<<ite4->first<<ite4->second<<endl;


	cout<<"...........upper_bound................."<<endl;

	ite4 = map4.upper_bound(12);
	cout<<ite4->first<<ite4->second<<endl;

}


void MultiMapConstruct(){
	typedef pair<int,char> input_pair;
	multimap<int,char> multimap1;
	multimap1.insert(input_pair(1,'a'));
	multimap1.insert(input_pair(1,'a'));
	multimap1.insert(input_pair(2,'b'));
	multimap1.insert(input_pair(3,'b'));

	multimap1.insert(input_pair(4,'c'));
	multimap1.insert(input_pair(5,'d'));
	multimap1.insert(input_pair(5,'e'));
	multimap<int,char>::iterator ite1;
	ite1 = multimap1.begin();
	for(ite1;ite1!=multimap1.end();ite1++){
		cout<<ite1->first<<ite1->second<<endl;
	}
	int count = multimap1.count(5);
	cout<<count<<endl;

	ite1 = multimap1.find(5);
	cout<<ite1->first<<ite1->second<<endl;

}
int main(){
	//MapOther();
	//MapDelete();
	//MapConstruct();
	MultiMapConstruct();
	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值