集合

使用set或multiset之前,必须加入头文件<set>

Set、multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素。

sets和multiset内部以平衡二叉树实现

1.   常用函数

1)        构造函数和析构函数

set c:创建空集合,不包含任何元素

set c(op):以op为排序准则,产生一个空的set

set c1(c2):复制c2中的元素到c1中

set c(const value_type *first, const value_type* last):复制[first, last)之间元素构成新集合

set c(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新集合。

c.~set()销毁所有元素,释放内存

multiset mc:创建空集合,不包含任何元素

multiset mc(op):以op为排序准则,产生一个空的set

multiset c1(c2):复制c2中的元素到c1中

multiset c(const value_type *first, const value_type* last):复制[first, last)之间元素构成新集合

multiset c(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新集合。

c.~set()销毁所有元素,释放内存

  1. // constructing sets
  2. #include <iostream>
  3. #include <set>
  4.  
  5. bool fncomp (int lhs, int rhs) {return lhs<rhs;}
  6.  
  7. struct classcomp {
  8. bool operator() (const int& lhs, const int& rhs) const
  9. {return lhs<rhs;}
  10. };
  11.  
  12. int main ()
  13. {
  14. std::set<int> first; // empty set of ints
  15.  
  16. int myints[]= {10,20,30,40,50};
  17. std::set<int> second (myints,myints+5); // range
  18.  
  19. std::set<int> third (second); // a copy of second
  20.  
  21. std::set<int> fourth (second.begin(), second.end()); // iterator ctor.
  22.  
  23. std::set<int,classcomp> fifth; // class as Compare
  24.  
  25. bool(*fn_pt)(int,int) = fncomp;
  26. std::set<int,bool(*)(int,int)> sixth (fn_pt); // function pointer as Compare
  27.  
  28. return 0;
  29. }

2)        大小、判断空函数

int size() const:返回容器元素个数
    bool empty() const:判断容器是否为空,若返回true,表明容器已空

3)        增加、删除函数

pair<iterator,bool> insert( x):插入元素x

iterator insert(iterator it,x):在迭代器it处插入元素x

void insert(const value_type *first,const value_type *last):插入[first, last)之间元素

iterator erase(iterator it):删除迭代器指针it处元素

iterator erase(iterator first,iterator last):删除[first, last)之间元素

size_type erase(const Key& key):删除元素值等于key的元素

  1. #include <iostream>
  2. #include <set>
  3.  
  4. int main ()
  5. {
  6. std::set<int> myset;
  7. std::set<int>::iterator it;
  8. std::pair<std::set<int>::iterator,bool> ret;
  9.  
  10. // set some initial values:
  11. for (int i=1; i<=5; ++i) myset.insert(i*10); // set: 10 20 30 40 50
  12.  
  13. ret = myset.insert(20); // no new element inserted
  14.  
  15. if (ret.second==false) it=ret.first; // "it" now points to element 20
  16.  
  17. myset.insert (it,25); // max efficiency inserting
  18. myset.insert (it,24); // max efficiency inserting
  19. myset.insert (it,26); // no max efficiency inserting
  20.  
  21. int myints[]= {5,10,15}; // 10 already in set, not inserted
  22. myset.insert (myints,myints+3);
  23.  
  24. std::cout << "myset contains:";
  25. for (it=myset.begin(); it!=myset.end(); ++it)
  26. std::cout << ' ' << *it;
  27. std::cout << '\n';
  28.  
  29. return 0;
  30. }
  1. #include <iostream>
  2. #include <set>
  3.  
  4. int main ()
  5. {
  6. std::set<int> myset;
  7. std::set<int>::iterator it;
  8.  
  9. // insert some values:
  10. for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90
  11.  
  12. it = myset.begin();
  13. ++it; // "it" points now to 20
  14.  
  15. myset.erase (it);
  16.  
  17. myset.erase (40);
  18.  
  19. it = myset.find (60);
  20. myset.erase (it, myset.end());
  21.  
  22. std::cout << "myset contains:";
  23. for (it=myset.begin(); it!=myset.end(); ++it)
  24. std::cout << ' ' << *it;
  25. std::cout << '\n';
  26.  
  27. return 0;
  28. }

4)        遍历函数

iterator begin():返回首元素的迭代器指针

iterator end():返回尾元素的迭代器指针
    reverse_iterator rbegin():返回尾元素的逆向迭代器指针
    reverse_iterator rend():返回首元素前一个位置的迭代器指针

  1. #include <iostream>
  2. #include <set>
  3.  
  4. int main ()
  5. {
  6. int myints[] = {75,23,65,42,13};
  7. std::set<int> myset (myints,myints+5);
  8.  
  9. std::cout << "myset contains:";
  10. for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
  11. std::cout << ' ' << *it;
  12.  
  13. std::cout << '\n';
  14.  
  15. return 0;
  16. }

5)        操作函数

const_iterator lower_bound(const Key& key):返回容器中大于等于key的迭代器指针

const_iterator upper_bound(const Key& key):返回容器中大于key的迭代器指针

int count(const Key& key) const:返回容器中元素等于key的元素的个数
    pair<const_iterator,const_iterator> equal_range(const Key& key) const:返回容器中元素值等于key的迭代指针[first, last)
    const_iterator find(const Key& key) const:查找功能,返回元素值等于key的迭代器指针
    void swap(set& s):交换集合元素
    void swap(multiset& s):交换多集合元素

  1. #include <iostream>
  2. #include <set>
  3.  
  4. int main ()
  5. {
  6. std::set<int> myset;
  7. std::set<int>::iterator itlow,itup;
  8.  
  9. for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90
  10.  
  11. itlow=myset.lower_bound (30); // ^
  12. itup=myset.upper_bound (60); // ^
  13.  
  14. myset.erase(itlow,itup); // 10 20 70 80 90
  15.  
  16. std::cout << "myset contains:";
  17. for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
  18. std::cout << ' ' << *it;
  19. std::cout << '\n';
  20.  
  21. return 0;
  22. }
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <set>
  4.  
  5. using namespace std;
  6.  
  7. int main ()
  8. {
  9. set<int> myset;
  10.  
  11. for (int i=1; i<=5; i++) myset.insert(i*10); // myset: 10 20 30 40 50
  12.  
  13. pair<set<int>::const_iterator,set<int>::const_iterator> ret;
  14. ret = myset.equal_range(30);
  15.  
  16. cout << "the lower bound points to: " << *ret.first << '\n';
  17. cout << "the upper bound points to: " << *ret.second << '\n';
  18.  
  19. return 0;
  20. }
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <set>
  4.  
  5. using namespace std;
  6.  
  7. int main ()
  8. {
  9. int myints[]={12,75,10,32,20,25};
  10. set<int> first (myints,myints+3); // 10,12,75
  11. set<int> second (myints+3,myints+6); // 20,25,32
  12.  
  13. first.swap(second);
  14.  
  15. cout << "first contains:";
  16. for (set<int>::iterator it=first.begin(); it!=first.end(); ++it)
  17. cout << ' ' << *it;
  18. cout << '\n';
  19.  
  20. cout << "second contains:";
  21. for (set<int>::iterator it=second.begin(); it!=second.end(); ++it)
  22. cout << ' ' << *it;
  23. cout << '\n';
  24.  
  25. return 0;
  26. }

STL之五:set/multiset用法详解的更多相关文章

  1. STL:set/multiset用法详解

    集合 使用set或multiset之前,必须加入头文件<set> Set.multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素. sets和mul ...

  2. [STL]set/multiset用法详解[自从VS2010开始,set的iterator类型自动就是const的引用类型]

    集合 使用set或multiset之前,必须加入头文件<set> Set.multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素. sets和mul ...

  3. STL:map/multimap用法详解

    map/multimap 使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理.它们可根据key的排序准则 ...

  4. STL之一:字符串用法详解

    转载于:http://blog.csdn.net/longshengguoji/article/details/8539471 字符串是程序设计中最复杂的变成内容之一.STL string类提供了强大 ...

  5. STL list链表的用法详解

    本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通函数,而且例子丰富,通俗易懂.不失为STL的入门文章,新手不容错过! 0 前言 1 定义一个list 2 使用list的成员函 ...

  6. set/multiset用法详解

    集合 使用set或multiset之前,必须加入头文件<set> Set.multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素. sets和mul ...

  7. STL:vector容器用法详解

    vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着ve ...

  8. STL之四:list用法详解

    转载于:http://blog.csdn.net/longshengguoji/article/details/8520891 list容器介绍 相对于vector容器的连续线性空间,list是一个双 ...

  9. STL之三:deque用法详解

    转载于:http://blog.csdn.net/longshengguoji/article/details/8519812 deque函数: deque容器为一个给定类型的元素进行线性处理,像向量 ...

随机推荐

  1. Unity编辑器 - 使用GL绘制控件

    Unity编辑器 - 使用GL绘制控件 控件较为复杂时,可能造成界面卡顿,在EditorGUI中也可以灵活使用GL绘制来提升性能. 以绘制线段为例: using UnityEngine; using ...

  2. Uncaught Error: code length overflow. (1604>1056)

    解决方法来源~~~https://blog.csdn.net/arrowzz/article/details/80656510 二维码生成时,如果长度太长会有异常: Uncaught Error: c ...

  3. 数独:dfs+剪枝+位运算+排除冗余+优化搜索顺序(未完)

    和蓝桥杯以前一个题一样,但是数据加强了,博主水平有限,没做出来,先在这里记录一下,这里正解,下面是博主的超时做法.最近准备考研,不能深入学习了. 题目描述 数独是一种传统益智游戏,你需要把一个9 × ...

  4. 十六:The YARN Service Registry

    yarn 服务注册功能是让长期运行的程序注册为服务一直运行. yarn中运行的程序分为两类,一类是短程序,一类一直运行的长程序.第二种也称为服务.yarn服务注册就是让应用程序能把自己注册为服务,如h ...

  5. 自动对象&局部静态对象

    一.关键点 对象的生命周期:程序执行过程中,该对象存在的那段时间 局部对象:形参.函数体内部定义的变量 二.自动对象 自动对象:只存在于块执行期间的对象 包括:局部变量.形参 三.局部静态对象 特点: ...

  6. C语言实验——时间间隔

    Description 从键盘输入两个时间点(24小时制),输出两个时间点之间的时间间隔,时间间隔用“小时:分钟:秒”表示. 如:3点5分25秒应表示为--03:05:25.假设两个时间在同一天内,时 ...

  7. 福大软工1816:Alpha(6/10)

    Alpha 冲刺 (6/10) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务: 文字/口头描述: 1.组织会议 2.帮助队员解决 ...

  8. j2ee—框架(1):Servlet+JSP实现基本的登录功能(v1.0)

    主要分为四个部分:LoginController.web.xml.login.jsp和login_success.jsp(login_fail.jsp). 第一部分 LoginController p ...

  9. alpha-4

    前言 失心疯病源4 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 今天完成了那些任务 19:00~21:50 利用背景相减法完成背景构建与更新模块,查找关于blob更多的论文资 ...

  10. Redis 学习之集群

    该文使用centos6.5 64位  redis3.2.8 一.  redis-cluster架构图 集群通信:所有redis节点之间通过PING-PONG机制彼此互联,内部使用二进制鞋子优化传输速度 ...