使用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. bool fncomp (int lhs, int rhs) {return lhs<rhs;}
  5. struct classcomp {
  6. bool operator() (const int& lhs, const int& rhs) const
  7. {return lhs<rhs;}
  8. };
  9. int main ()
  10. {
  11. std::set<int> first;                           // empty set of ints
  12. int myints[]= {10,20,30,40,50};
  13. std::set<int> second (myints,myints+5);        // range
  14. std::set<int> third (second);                  // a copy of second
  15. std::set<int> fourth (second.begin(), second.end());  // iterator ctor.
  16. std::set<int,classcomp> fifth;                 // class as Compare
  17. bool(*fn_pt)(int,int) = fncomp;
  18. std::set<int,bool(*)(int,int)> sixth (fn_pt);  // function pointer as Compare
  19. return 0;
  20. }

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

4)        遍历函数

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

iterator end():返回尾元素的迭代器指针

    reverse_iterator rbegin():返回尾元素的逆向迭代器指针

    reverse_iterator rend():返回首元素前一个位置的迭代器指针

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

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

stl 之set图解的更多相关文章

  1. 【陪你系列】5 千字长文+ 30 张图解 | 陪你手撕 STL 空间配置器源码

    大家好,我是小贺. 点赞再看,养成习惯 文章每周持续更新,可以微信搜索「herongwei」第一时间阅读和催更,本文 GitHub https://github.com/rongweihe/MoreT ...

  2. 带你深入理解STL之RBTree

    最近一直忙于校招的笔试,STL的深入理解系列也耽搁了好几天,再加上!红黑树真的是超级超级难理解,超级超级复杂,参考了好多博客上的大神的理解才稍微明白一点,勉强入个门,下面请以一个菜鸟的角度跟着我一起学 ...

  3. 带你深入理解STL之Deque容器

    在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点.vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操 ...

  4. 带你深入理解STL之Vector容器

    C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. ST ...

  5. 详解使用 Tarjan 求 LCA 问题(图解)

    LCA问题有多种求法,例如倍增,Tarjan. 本篇博文讲解如何使用Tarjan求LCA. 如果你还不知道什么是LCA,没关系,本文会详细解释. 在本文中,因为我懒为方便理解,使用二叉树进行示范. L ...

  6. STL标准库-迭代器适配器

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 这次主要介绍一下迭代器适配器.以reverse_iterator(反向迭代器),insert_iterator(插入迭代器),o ...

  7. STL空间配置器那点事

    STL简介 STL(Standard Template Library,标准模板库),从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其 ...

  8. STL源码剖析(heap)

    STL heap并不是容器,而是一系列的算法. 这些算法接受RandomAccessIterator[start, end),并将其表述成一棵完全二叉树. 关于heap算法可以参考之前算法导论的一篇博 ...

  9. 『嗨威说』算法设计与分析 - STL中Sort函数的实现原理初探

    本文索引目录: 一.对Sort算法实现的个人阅读体会 二.Sort算法使用的三个排序算法的优点介绍 2.1 插入排序的优缺点 2.2 堆排序的优缺点 2.3 快速排序的优缺点 2.4 新的结合排序—— ...

随机推荐

  1. resnet.caffemodel

    http://blog.csdn.net/baidu_24281959/article/details/53203757

  2. JavaEE-01 JSP动态网页基础

    学习要点 B/S架构的基本概念 Web项目的创建和运行 JSP页面元素 MyEclipse创建和运行Web项目 Web程序调试 Web简史 web前端技术演进三阶段 WEB 1.0:信息广播. WEB ...

  3. _vimrc配置

    set nocompatible set encoding=utf8 set guioptions-=T set number set guifont=consolas:h12 source $VIM ...

  4. C# string补位

    参考:https://www.cnblogs.com/zhangqs008/archive/2012/02/01/2341078.html //1.1.左补位 "; , 'A'); //1. ...

  5. Angular JavaScript内存溢出问题 (FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory)

    方法一和方法二参考:https://www.cnblogs.com/liugang-vip/p/6857595.html 方法一:my-project/node_modules/.bin 下增大内存( ...

  6. SANBA服务和FTP服务

    1.samba服务 Smb主要作为网络通信协议:Smb是基于cs(client/server)架构(架构还有bs,broswer/server):完成linux与windows之间的共享:linux与 ...

  7. js多维数组扁平化

    数组扁平化,就是将多维数组碾平为一维数组,方便使用. 一:例如,一个二维数组 var arr = ['a', ['b', 2], ['c', 3, 'x']],将其扁平化: 1.  通过 apply ...

  8. CSS链接四种状态注意顺序、UI伪类选择器的顺序

    css定义超链接是要有先后顺序的.否则,可能会出现某个或某几个样式不起作用的bug.例如:visited与hover顺序颠倒了,则不能显示hover和active的样式了. 正确的顺序: a:link ...

  9. 【04】Firebug页面概况查看

    Firebug页面概况查看 使用Firebug的概况,你可以测试Web页面导致延迟加载的文件. 通过打开页面 Firebug > Console(控制台)> Profile(概况). 你需 ...

  10. JustinMind

    看到公司老板新请来的兼职产品经理,在讲项目功能设计图是,用的是justinmind这个工具,觉得很好奇,默默记下,或许以后能用到.下面是搜的简单的介绍,只是为了记住这个工具名字,现并没有想要深入探究这 ...