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

来源:互联网 发布:网络语言大二班 编辑:程序博客网 时间:2024/06/05 21:58

简介

  • 使用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;//20cout<<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,存在1iset.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
原创粉丝点击