C++ STL set集合

朴灿烈づ我的快乐病毒、 2021-06-24 15:58 526阅读 0赞

set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的的数据结构,在插入元素时,会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值。平衡二叉检索树的检索使用中序遍历算法,检索效率高于vector、deque、和list的容器。另外,采用中序遍历算法可将键值由小到大遍历出来,所以,可以理解为平衡二叉检索树在插入元素时,就会自动将元素按键值从小到大的顺序排列。
内部值唯一,且自动排序。如果无需排序,可使用unordered_set(基于hash表实现的。)

一、初始化

  1. int num[4]={
  2. 1,2,3,4};
  3. set<int> set_int(num,num+4);

二、插入

  1. //插入值(重复元素,不会插入),返回pair对象,.second表示是否插入成功。
  2. pair<iterator, bool> insert(value)
  3. //在pos位置之前插入value,返回新元素位置。
  4. iterator insert(&pos, value)
  5. //将迭代区间[&first, &last)(左闭右开)内所有的元素,插入到set容器
  6. void insert[&first, &last)

三、删除

  1. //移除set容器内元素值为value的所有元素,返回移除的元素个数。
  2. size_type erase(value) //移除pos位置上的元素。
  3. void erase(&pos) //移除迭代区间[&first, &last)内的元素。
  4. void erase(&first, &last) //清空。
  5. void clear()

四、查找

  1. 返回set对象内元素值为value的元素个数。
  2. count(value)
  3. 返回value所在位置,找不到value将返回end()。
  4. iterator find(value)
  5. set<int>::iterator it;
  6. it = s.find(8); //查找键值为6的元素
  7. if(it != s.end())
  8. cout << *it << endl;

五、其他

  1. begin()--返回指向第一个元素的迭代器
  2. empty()--如果集合为空,返回true
  3. end()--返回指向最后一个元素的迭代器
  4. rbegin()--返回指向集合中最后一个元素的反向迭代器
  5. rend()--返回指向集合中第一个元素的反向迭代器
  6. size()--集合中元素的数目
  7. swap()--交换两个集合变量
  8. lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
  9. upper_bound()--返回大于某个值元素最后一个的迭代器

遍历方法:

  1. set<int>::iterator it;
  2. for(it = s.begin(); it != s.end(); it++)
  3. {
  4. cout << *it << " ";
  5. }
  6. set<int>::reverse_iterator rit;
  7. for(rit = s.rbegin(); rit != s.rend(); rit++)
  8. {
  9. cout << *rit << " ";
  10. }

发表评论

表情:
评论列表 (有 0 条评论,526人围观)

还没有评论,来说两句吧...

相关阅读

    相关 STL Set集 合集 差集

    set是关联容器。其键值就是实值,实值就是键值,不可以有重复,所以我们不能通过set的迭代器来改变set的元素的值,set拥有和list相同的特性:当对他进行插入和删除操作的时

    相关 C++ STL set

    set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树

    相关 C++ STL集合:set

    集合:set 集合是常用的容器。set中的所有元素都会根据元素的建值自动排序,且每个元素最多中出现一次 注意: iterator是迭代器,是STL中的重要概念,类似于指针。