• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ 中set

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

set特点:

  1. 所有元素不会重复,重复插入已经有的新值无效;
  2. 所有元素按顺序排列;unordered_set除外
  3. 键和值相同,所以set中的值是不可更改的

set的各成员函数列表如下:

1.begin()--返回指向第一个元素的迭代器  // 如果当前容器是空的,就不能解引用(Dereferenced)返回的迭代器值。

2. clear()--清除所有元素

3. count()--返回某个值元素的个数    //    set.count(x)--返回x元素的个数,注意:由于set内元素不能重复,所以此处count的结果只能是0(没有)或者1(有且仅有一个

4. empty()--如果集合为空,返回true //用迭代器之前需要验证是否为空

5. end()--返回指向最后一个元素的迭代器

6. equal_range()--返回集合中与给定值相等的上下限的两个迭代器

7. erase()--删除集合中的元素

8. find()--返回一个指向被查找到元素的迭代器   // set.find(x)--返回x元素的迭代器,即该节点的指针;没找到返回set.end()  

9. get_allocator()--返回集合的分配器

10. insert()--在集合中插入元素  // 还有一个与之类似的函数:emplace. 之间的区别:添加新元素的时候调用的构造函数不同。

11. lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

12. key_comp()--返回一个用于元素间值比较的函数

13. max_size()--返回集合能容纳的元素的最大限值

14. rbegin()--返回指向集合中最后一个元素的反向迭代器

15. rend()--返回指向集合中第一个元素的反向迭代器

16. size()--集合中元素的数目

17. swap()--交换两个集合变量

18. upper_bound()--返回大于某个值元素的迭代器

19. value_comp()--返回一个用于比较元素间的值的函数

 

和vector、list不同,set、map都是关联式容器。set内部是基于红黑树实现的。插入和删除操作效率较高,因为只需要修改相关指针而不用进行数据的移动。

在进行数据删除操作后,迭代器会不会失效呢?删除set的数据时,实际的操作是删除红黑树中的一个节点,然后相关指针做相关调整。指向其他元素的迭代器还是指向原位置,并没有改变,所以删除一个节点后其他迭代器不会失效。list和map也是同样的道理。然而删除vector中的某个元素,vector中其他迭代器会失效,因为vector是基于数组的,删除一个元素后,后面的元素会往前移动,所以指向后面元素的迭代器会失效。 

再稍微说一下迭代器的实现。迭代器是一个对象,vector的迭代器是封装了数组下标list、map、set的迭代器是封装了元素节点的指针。 
还有一点,从数学层面,set的一个集合,好比一个袋子里面装了好多个小球。但是红黑树是一种特殊的二叉搜索树,set中的元素根据其值的大小在红黑树中有特定的位置,是不可移动的。所以,1是search操作效率会很高O(log n),2是set中元素的值不可改变。

 

 

 

参考文章:

http://classfoo.com/ccby/article/w2pUE

https://blog.csdn.net/u010902721/article/details/45771597

https://www.cnblogs.com/omelet/p/6627667.html

https://blog.csdn.net/qq826647235/article/details/53741372

 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++primer plus第六版课后编程题答案 6.3发布时间:2022-07-14
下一篇:
C语言中数据类型和变量发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap