C++ 10.4 关联容器-----set 类型

简介

  • 使用set容器,必须包含set 头文件。操作基本与map 的相同

  • 与map容器一样,set 容器的每个键都只能对应一个元素

    • 以一段范围的元素初始化set对象,或在set对象中插入一组元素时,对于每个键,事实上都只添加了一个元素:

    • set 支持map的很多操作,除了以下的操作:

    • set不支持下标操作,而且没有定义mapped_type 类型

    • 在set 容器中,value_type不是pair 类型,而是与key_type相同的类型,因为set里面是键的集合。

    • 使用set容器,必须包含set 头文件。操作基本与map 的相同

  • set容器不提供下标操作符。为了通过键从set中获取元素,可使用find 运算。如果只需要判断某个元素是否存在,同样可以使用count 运算,返回set 中该键对应的元素个数。对于set 容器,count 的返回值只能是1(元素存在)或0(元素不存在)

=============================================================================================

一、引言

  • map 容器是键—值对的集合,好比以人名为键的地址和电话号码。

  • set 容器只是单纯的键的集合。适用于只需要判断某值是否存在的情况。而map适用于需要了解键与值的对应的的情况。

  • set 里面存储的键必须唯一,不能修改,和map一样

  • set 支持map的很多操作,除了以下的操作:

    • set不支持下标操作,而且没有定义mapped_type 类型

    • 在set 容器中,value_type不是pair 类型,而是与key_type相同的类型,因为set里面是键的集合。

  • set 容器和list 容器的区别

    • set 适用于保存元素值不变的集合

    • list适用于保存会发生变化的元素(增删改)

二、set 容器的定义和使用

1、set容器的初始化

  • 使用set容器,必须包含set 头文件。操作基本与map 的相同

  • 与map容器一样,set 容器的每个键都只能对应一个元素

    • 以一段范围的元素初始化set对象,或在set对象中插入一组元素时,对于每个键,事实上都只添加了一个元素:
vector<int> ivec;
for(vector<int>::size_type i=0;i!=10;i++)
   {ivec.push_back(i);
    ivec.push_back(i);
   }

set<int> iset(ivec.begin();ivec.end());
cout<<ivec.size()<<endl;//20
cout<<iset.size()<<endl;//10
//ivec 里面有20个元素 0-9 每个元素都出现了两次。然后用ivec中所有的元素初始化一个int型的set容器,则这个set容器仅有10个元素:ivec中个不相同的元素。

2、在set中添加元素

set<string> set1;//空的set容器
set1.insert("the");//往set1容器中添加一个元素
set1.insert("end");//往set1容器中再添加一个元素,此时,里面有两个元素
  • 另一种用法是,调用insert函数时,提供一对迭代器实参,插入其标记范围内所有的元素。该版本的insert 函数类似于形参为一对迭代器的构造函数—对于一个键,仅插入一个元素.

    • 与map容器一样,带有一个键参数的insert 版本返回pair类型对象,包含一个迭代器和一个bool值,迭代器指向拥有该键的元素,而bool值表明是否添加了元素。使用迭代器对的insert版本返回void类型
set<int> iset2;//空的
iset.insert(ivec.begin(),ivec.end());

3、从set 中获取元素

  • set容器不提供下标操作符。为了通过键从set中获取元素,可使用find 运算。如果只需要判断某个元素是否存在,同样可以使用count 运算,返回set 中该键对应的元素个数。对于set 容器,count 的返回值只能是1(元素存在)或0(元素不存在)
iset.find(1);/返回一个迭代器,指向键为1的元素
iset.find(11);/返回一个迭代器,指向末尾
iset.count(1);//返回1,存在1
iset.count(11);//返回0,不存在11
  • set中的键也为const。不能修改!!!在获得指向set中某元素的迭代器后,只能对其读,不能写
set<int>::iterator set_it=iset.find(1);
*set_it =11;//错误!!!不能改set里面的元素值
cout<<*set_it<<endl;//可以!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值