STL学习笔记-关联容器

关联容器

STL中常用的关联容器有四种:set、map、mutimap、multiset。这四种容器中的元素都是按照键有序排列的,因此关联容器的键值必须是可比较的。

  1. 如果键值是基本类型可以直接使用,如果键值是自定义类型,需要定义带有比较谓词的构造函数
  2. map中保存着一系列的键值对儿,每个键对应一个值,键类似有索引的功能,具有唯一性,值表示该键关联的数据。
  3. 字典是一个典型的map,每个单词相当于一个键,对应的释义相当于键值
  4. set跟map的区别是,set中每个元素只包含一个键,该键同样具有唯一性
  5. 例如,可以使用set保存班级内男同学的学号(不需要知道学号对应的姓名)
  6. multiset和multimap与set和map的区别在于,其可以有重复的键,例如一个身份证号对应多张银行卡
  7. set和map的访问非常高效,可以达到对数的级别,效率上的优势是通过红黑树这种复杂的数据结构保证的

真题:set和map配合使用的例子

/*
开户信息1234567890987654321,前9位为身份信息,身份信息前3位为城市信息,后10位为账户信息。现在需要输出所有开户信息覆盖的城市信息,以及开户超过两个的身份信息
*/

void statistic(vector<string>&acc,set<string> &city,map<string,int> &people){

	for(auto it = acc.begin();it !=acc.end();it++){
	
		string uid =(*it).substr(0,18);
		city.insert(uid.substr(0,3));
		people[(*it).substr(0,18)]++;
	
	}
	for(auto it = city.begin();it!=city.end();it++){
		cout<< *it <<endl;
	}
	map<string,int>::iterator it = people.begin();
   while(it != peoplr.end()){
		if((*it).second<2){
	     people.erase((*it++).first)
		}else{
			cout<<(*it).first<<" : "<<(*it).second<<endl;
			it++;
		}
	}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值