博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十章 关联容器(下)
阅读量:5235 次
发布时间:2019-06-14

本文共 2115 字,大约阅读时间需要 7 分钟。

1.set类型的关联容器

set容器跟map容器相类似,只不过set的容器只是单纯的键的集合。set容器不支持下标操作,元素类型不是value_type类型,而是key_type类型。即set容器仅仅只存储键,而没有所关联的值。与map容器一样,存储的键也必须是唯一的,不能修改。

2.set的容器的定义

set<T>iset;创建一个空的set的对象iset,元素类型为T。

set<T>iset(b,e);创建一个set的对象iset,有迭代器b和e指定范围的元素初始化,元素必须是T类型。

3.set的容器的添加元素

由于set容器不支持下标操作,所以只有与map容器一样采用insert操作来添加元素。

set<string>set1("liujiyu"),set2("nihao");

set1.insert(set2.begin(),set2.end());

4.set容器读取相应的元素

set容器和map容器获取元素的时候不同,set的容器采用find和count成员函数来获取元素。

set<int>iset;

iset.find(a);查找整数a的值,如果存在,则返回指向a的位置的迭代器。否则返回指向set.end()的迭代器

iset.count(a);查找整数a出现的次数。在set的容器中,count成员函数返回的只有0或者1

5.遍历set容器的元素

这个操作跟map容器一样,通过迭代器来遍历,唯一不同的是set的容器仅仅只有键值,所以直接对其进行解引用就可以得到相应的键值。

6.multimap和multiset容器

multimap容器是是一个键对应多个不同的值。multiset就是存在多个相同的键。并且multimap不支持下标操作。

multimap和multiset容器的添加删除元素:

添加元素的操作是采用insert操作来实现的。插入之后相应的键值就是按照从小到大的顺序排列的。

删除元素的操作是采用erase来实现的。该删除操作是删除所有相同的键的元素。

7.multimap和multiset容器中查找元素

查找元素主要通过find和count来个成员函数共同来完成,通过find成员函数找到相应键的第一个位置,count成员函数统计该键出现的次数。然后再利用一个循环将这相同键的元素都输出。

如:multimap<string,int>imulmap;

string s;

while(cin>>s){

imulmap.insert(make_pair(s,2));}

string s1;cin>>s1;

multimap<string,int>::iterator it=imulmap.find(s1);

multimap<string,int>::size_type ix=imulmap.count(s1);

for(multimap<string,int>::size_type itt=0;itt!=ix;++itt)

cout<<it->first<<" "<<it->second;

8.与众不同的面向迭代器的解决方案

以下操作适合所有的关联容器:

m.lower_bound(k) 返回一个迭代器,指向键不小于k的第一个元素

m.upper_bound(k)   返回一个迭代器,指向键大于k的第一个元素

m.equal_range(k)    返回一个迭代器的pair对象,它的first成员等价于m.lower_bound(k),而second成员等价于m.upper_bound(k)  

如:multimap<string,int>imulmap;

string s;

while(cin>>s){

imulmap.insert(make_pair(s,2));}

string s1;cin>>s1;

multimap<string,int>::iterator beg=imulmap.lower_bound(s1),end=imulmap.upper_bound(s1);

while(beg!=end){

cout<<beg->first<<" "<<beg->second<<endl;

++beg;}

使用equal_range函数:multimap<string,int>imulmap;

string s;

while(cin>>s){

imulmap.insert(make_pair(s,2));}

string s1;cin>>s1;

pair<multimap<string,int>::iterator,multimap<string,int>::iterator> iter=imulmap.equal_range(s1);

while(iter.first!=iter.second){

cout<<iter.first->first<<" "<<iter.first->second<<endl;

++iter.fisrt;}

 

 

转载于:https://www.cnblogs.com/ljy2013/p/3307877.html

你可能感兴趣的文章
转:基于用户投票的排名算法系列
查看>>
WSDL 详解
查看>>
[转]ASP数组全集,多维数组和一维数组
查看>>
C# winform DataGridView 常见属性
查看>>
逻辑运算和while循环.
查看>>
Nhiberate (一)
查看>>
c#后台计算2个日期之间的天数差
查看>>
安卓开发中遇到的小问题
查看>>
ARTS打卡第3周
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
cookies相关概念
查看>>
CAN总线波形中ACK位电平为什么会偏高?
查看>>
MyBatis课程2
查看>>
桥接模式-Bridge(Java实现)
查看>>
svn客户端清空账号信息的两种方法
查看>>
springboot添加servlet的两种方法
查看>>
java的Array和List相互转换
查看>>
layui父页面执行子页面方法
查看>>
如何破解域管理员密码
查看>>
Windows Server 2008 R2忘记管理员密码后的解决方法
查看>>