一、什么是 set?set 容器,又称集合容器,即该容器的底层是以红黑树变体实现的,是典型的关联式容器。这意味着,set 容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中。跟任意其它类型容器一样,它能够存放各种类型的对象。
二、容器特性1.存储结构set是由多个节点(二叉树中的红黑树变体)组成的。
2.集合set 容器不能在指定位置插入,意味着不支持at(pos)和[]操作。在set中查找元素,效率是非常高的
multiset与set的区别:set中的元素值唯一,每个元素只能出现一次;而multiset中同一元素可以出现多次。
3.双向迭代器不支持随机访问迭代器,只能从容器中第一个元素或最后一个元素开始遍历容器,直到找到该位置。
三、基本函数实现1,构造函数set();创建一个空setset(const set&);复制构造函数set(begin,end);复制[begin,end)区间内的元素,到另一个set中2.set插入iterator insert(const t& x); 插入元素3.set删除iterator erase(iterator it);删除集合中迭代器指向元素iterator erase(iterator first,iterator last);删除集合中[first,last)中元素size_type erase(const key_type& elem); 删除指定的元素void clear();清空集合中所有元素4.查找函数iterator set.find(elem); //查找elem元素,返回指向elem元素的迭代器。
size_type set.count(elem); //返回容器中值为elem的元素个数。对set来说,要么是0,要么是1。对multiset来说,值可能大于1。
iterator set.lower_bound(elem); //返回第一个>=elem元素的迭代器。
iterator set.upper_bound(elem); // 返回第一个>elem元素的迭代器。
reverse_iterator rbegin();反向迭代器,指向最后一个元素
pair set.equal_range(elem); //返回一对迭代器,这两个迭代器分别用于指向set中大于指定元素的第一个元素,以及等于或大于指定元素的第一个元素。
equal_range返回值pair是什么?
pair.second是pair里面的第二个值,是t2类型。pair.first是pair里面的第一个值,是t1类型。pair存放的两个值的类型,可以不一样,如t1为int,t2为float。t1,t2也可以是自定义类型。pair译为对组,实际上就是一个结构体类型,有两个成员。5.判断函数bool empty() const;判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。6.大小函数int size() const;返回集合中元素的个数int max_size() const;返回最大可允许的set元素数量值7.其他函数void swap(set&);交换两个同类型集合的数据四、基本用法#include#includeusing namespace std;int main(){ set s; for (int i = 0; i < 10; i++) { s.insert(rand()%20); } for (set::iterator it = s.begin(); it != s.end(); it++) { cout << *it << ; } cout <<\\nset size():<< s.size() << endl; //输出:0 1 2 4 7 9 14 18 为什么只输出8个元素呢? //因为set只能存在唯一的元素,重复的会被丢掉 //思考:为什么set里面的元素是有序的呢? //因为set是关联式容器,会默认按照升序进行排列 //如果找到,返回指向的迭代器,没有找到返回end()迭代器,所以再输出之前 //需要判断是否找到 set::iterator it1 = s.find(6); if (it1 != s.end()) { cout << *it1 << endl; } //如果set中有等于4的元素,则返回指向4的迭代器,如果没有返回第一个 //大于4的元素的迭代器,没有找到返回end()迭代器 it1 = s.lower_bound(4); if (it1 != s.end()) { cout << *it1 << endl; } //如果set中有大于4的元素,返回第一个大于4的元素的迭代器,没有找 //到返回end()迭代器 it1 = s.upper_bound(4); if (it1 != s.end()) { cout << *it1 << endl; } cout <<------------------我是 c语言plus 华丽分割线<
华为P10闪存门最新消息:华为P10闪存门之后,还值得购买吗?
远特通信将在5G时代补充通信行业的缝隙需求
如何为恶劣环境选择传感器连接器?
全球PLC制造商Top20有哪些?
使用按钮依次切换8个输出且可控制输出通道
什么是set?
realme,Q3与真我 buds air 2neo实际表现如何
对抗极端天气,曙光牵手武汉暴雨所
关于高电压界面的ESD解决方案的分析和介绍
苹果明年发布AirPods Pro Lite,不支持降噪
ams与Precision Biomonitoring携手开发可快速检测COVID-19病毒检测装置
都是光能发电,飞英思特微光能采集与普通光能采集有何区别?
基于位置的VR可以让人们便捷的体验VR
STM32F103C8T6单片机最小系统电路原理图
香蕉派社区推出带10G SFP+ 端口的Banana Pi BPI-R4 Wifi7开源路由器
浅谈AEC-Q200电容汽车级铝电解
米其林研发专用于电动车的碳中性轮胎
电力电容器在钢铁行业供电系统的应用
斗山创新与珠海紫燕合作,促进氢动力系统在工业无人直升机的应用
2023年全球半导体设备投资年减16% 将创10年来最大跌幅