c++集合_c++集合运算幂集 - CSDN
精华内容
参与话题
  • C/C++ 求一个集合的子集,代码易懂,好用,谢谢下载
  • C++ 集合set 详解

    万次阅读 2017-07-23 23:42:17
    C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set...

    1.关于set

    C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。

    关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。

     关于set有下面几个问题:

    (1)为何map和set的插入删除效率比用其他序列容器高?

    大部分人说,很简单,因为对于关联容器来说,不需要做内存拷贝和内存移动。说对了,确实如此。set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点。结构图可能如下:

     

      A
       / \
      B C
     / \ / \
      D E F G

    因此插入的时候只需要稍做变换,把节点的指针指向新的节点就可以了。删除的时候类似,稍做变换后把指向删除节点的指针指向其他节点也OK了。这里的一切操作就是指针换来换去,和内存移动没有关系。

    (2)为何每次insert之后,以前保存的iterator不会失效?

    iterator这里就相当于指向节点的指针,内存没有变,指向内存的指针怎么会失效呢(当然被删除的那个元素本身已经失效了)。相对于vector来说,每一次删除和插入,指针都有可能失效,调用push_back在尾部插入也是如此。因为为了保证内部数据的连续存放,iterator指向的那块内存在删除和插入过程中可能已经被其他内存覆盖或者内存已经被释放了。即使时push_back的时候,容器内部空间可能不够,需要一块新的更大的内存,只有把以前的内存释放,申请新的更大的内存,复制已有的数据元素到新的内存,最后把需要插入的元素放到最后,那么以前的内存指针自然就不可用了。特别时在和find等算法在一起使用的时候,牢记这个原则:不要使用过期的iterator。

    (3)当数据元素增多时,set的插入和搜索速度变化如何?

    如果你知道log2的关系你应该就彻底了解这个答案。在set中查找是使用二分查找,也就是说,如果有16个元素,最多需要比较4次就能找到结果,有32个元素,最多比较5次。那么有10000个呢?最多比较的次数为log10000,最多为14次,如果是20000个元素呢?最多不过15次。看见了吧,当数据量增大一倍的时候,搜索次数只不过多了1次,多了1/14的搜索时间而已。你明白这个道理后,就可以安心往里面放入元素了

    2.set中常用的方法


    begin()        ,返回set容器的第一个元素

    end()      ,返回set容器的最后一个元素

    clear()          ,删除set容器中的所有的元素

    empty()    ,判断set容器是否为空

    max_size()   ,返回set容器可能包含的元素最大个数

    size()      ,返回当前set容器中的元素个数

    rbegin     ,返回的值和end()相同

    rend()     ,返回的值和rbegin()相同

    写一个程序练一练这几个简单操作吧: 

    复制代码
     1 #include <iostream>
     2 #include <set>
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     set<int> s;
     9     s.insert(1);
    10     s.insert(2);
    11     s.insert(3);
    12     s.insert(1);
    13     cout<<"set 的 size 值为 :"<<s.size()<<endl;
    14     cout<<"set 的 maxsize的值为 :"<<s.max_size()<<endl;
    15     cout<<"set 中的第一个元素是 :"<<*s.begin()<<endl;
    16     cout<<"set 中的最后一个元素是:"<<*s.end()<<endl;
    17     s.clear();
    18     if(s.empty())
    19     {
    20         cout<<"set 为空 !!!"<<endl;
    21     }
    22     cout<<"set 的 size 值为 :"<<s.size()<<endl;
    23     cout<<"set 的 maxsize的值为 :"<<s.max_size()<<endl;
    24     return 0;
    25 }
    复制代码

    运行结果:

    小结:插入3之后虽然插入了一个1,但是我们发现set中最后一个值仍然是3哈,这就是set 。还要注意begin() 和 end()函数是不检查set是否为空的,使用前最好使用empty()检验一下set是否为空.

     


    count() 用来查找set中某个某个键值出现的次数。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了。

    示例代码:

    复制代码
     1 #include <iostream>
     2 #include <set>
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     set<int> s;
     9     s.insert(1);
    10     s.insert(2);
    11     s.insert(3);
    12     s.insert(1);
    13     cout<<"set 中 1 出现的次数是 :"<<s.count(1)<<endl;
    14     cout<<"set 中 4 出现的次数是 :"<<s.count(4)<<endl;
    15     return 0;
    16 }
    复制代码

    运行结果:

     


    equal_range() ,返回一对定位器,分别表示第一个大于或等于给定关键值的元素和 第一个大于给定关键值的元素,这个返回值是一个pair类型,如果这一对定位器中哪个返回失败,就会等于end()的值。具体这个有什么用途我还没遇到过~~~

    示例代码:

    复制代码
     1 #include <iostream>
     2 #include <set>
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     set<int> s;
     9     set<int>::iterator iter;
    10     for(int i = 1 ; i <= 5; ++i)
    11     {
    12         s.insert(i);
    13     }
    14     for(iter = s.begin() ; iter != s.end() ; ++iter)
    15     {
    16         cout<<*iter<<" ";
    17     }
    18     cout<<endl;
    19     pair<set<int>::const_iterator,set<int>::const_iterator> pr;
    20     pr = s.equal_range(3);
    21     cout<<"第一个大于等于 3 的数是 :"<<*pr.first<<endl;
    22     cout<<"第一个大于 3的数是 : "<<*pr.second<<endl;
    23     return 0;
    24 }
    复制代码

    运行结果:

     


    erase(iterator)  ,删除定位器iterator指向的值

    erase(first,second),删除定位器first和second之间的值

    erase(key_value),删除键值key_value的值

    看看程序吧:

    复制代码
     1 #include <iostream>
     2 #include <set>
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     set<int> s;
     9     set<int>::const_iterator iter;
    10     set<int>::iterator first;
    11     set<int>::iterator second;
    12     for(int i = 1 ; i <= 10 ; ++i)
    13     {
    14         s.insert(i);
    15     }
    16     //第一种删除
    17     s.erase(s.begin());
    18     //第二种删除
    19     first = s.begin();
    20     second = s.begin();
    21     second++;
    22     second++;
    23     s.erase(first,second);
    24     //第三种删除
    25     s.erase(8);
    26     cout<<"删除后 set 中元素是 :";
    27     for(iter = s.begin() ; iter != s.end() ; ++iter)
    28     {
    29         cout<<*iter<<" ";
    30     }
    31     cout<<endl;
    32     return 0;
    33 }
    复制代码

    运行结果:

    小结:set中的删除操作是不进行任何的错误检查的,比如定位器的是否合法等等,所以用的时候自己一定要注意。

     


    find()  ,返回给定值值得定位器,如果没找到则返回end()。

    示例代码:

    复制代码
     1 #include <iostream>
     2 #include <set>
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int a[] = {1,2,3};
     9     set<int> s(a,a+3);
    10     set<int>::iterator iter;
    11     if((iter = s.find(2)) != s.end())
    12     {
    13         cout<<*iter<<endl;
    14     }
    15     return 0;
    16 }
    复制代码

     


    insert(key_value); 将key_value插入到set中 ,返回值是pair<set<int>::iterator,bool>,bool标志着插入是否成功,而iterator代表插入的位置,若key_value已经在set中,则iterator表示的key_value在set中的位置。

    inset(first,second);将定位器first到second之间的元素插入到set中,返回值是void.

    示例代码:

    复制代码
     1 #include <iostream>
     2 #include <set>
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int a[] = {1,2,3};
     9     set<int> s;
    10     set<int>::iterator iter;
    11     s.insert(a,a+3);
    12     for(iter = s.begin() ; iter != s.end() ; ++iter)
    13     {
    14         cout<<*iter<<" ";
    15     }
    16     cout<<endl;
    17     pair<set<int>::iterator,bool> pr;
    18     pr = s.insert(5);
    19     if(pr.second)
    20     {
    21         cout<<*pr.first<<endl;
    22     }
    23     return 0;
    24 }
    复制代码

    运行结果:

     


    lower_bound(key_value) ,返回第一个大于等于key_value的定位器

    upper_bound(key_value),返回最后一个大于等于key_value的定位器

    示例代码:

    复制代码
     1 #include <iostream>
     2 #include <set>
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     set<int> s;
     9     s.insert(1);
    10     s.insert(3);
    11     s.insert(4);
    12     cout<<*s.lower_bound(2)<<endl;
    13     cout<<*s.lower_bound(3)<<endl;
    14     cout<<*s.upper_bound(3)<<endl;
    15     return 0;
    16 }
    复制代码

    运行结果:


    三.自定义比较函数
        (1)元素不是结构体:
            例:
            //自定义比较函数myComp,重载“()”操作符
    [cpp] view plain copy
    1. struct myComp  
    2. {  
    3.     bool operator()(const your_type &a,const your_type &b)  
    4.     [  
    5.         return a.data-b.data>0;  
    6.     }  
    7. }  
    8. set<int,myComp>s;  
    9. ......  
    10. set<int,myComp>::iterator it;  
        (2)如果元素是结构体,可以直接将比较函数写在结构体内。
            例:
    [cpp] view plain copy
    1. struct Info  
    2. {  
    3.     string name;  
    4.     float score;  
    5.     //重载“<”操作符,自定义排序规则  
    6.     bool operator < (const Info &a) const  
    7.     {  
    8.         //按score从大到小排列  
    9.         return a.score<score;  
    10.     }  
    11. }  
    12. set<Info> s;  
    13. ......  
    14. set<Info>::iterator it;  
    展开全文
  • 关于c++中set集合的使用

    千次阅读 2018-06-16 20:24:27
     会对集合中的元素根据键值自动排序,而且不允许集合中有重复元素 set中的函数:  声明: set 名称 例如: sets1;  begin()返回指向第一个元素的迭代器  end()返回指向最后一个元素的迭代器  关于迭代器:  ...

    set的特点是:

             会对集合中的元素根据键值自动排序,而且不允许集合中有重复元素

    set中的函数:

            声明: set <类型> 名称    例如: set<int>s1;

           begin()返回指向第一个元素的迭代器

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

           关于迭代器:

                 声明:set<类型>::iterator 名称

                访问迭代器指向元素时使用   *名称

                 需要注意的是: 迭代器只能自增,不能+1或者-1或者其他操作

                                               迭代器的类型要与定义的set类型相同

           删除函数:erase();      只能根据元素的值删除元素,不能根据第几个元素进行删除

           插入元素:insert();

         clear()--清除所有元素

      count()--返回某个值元素的个数

      empty()--如果集合为空,返回true equal_range()--返回集合中与给定值相等的上下限的两个迭代器

      find()--返回一个指向被查找到元素的迭代器

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

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

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

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

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

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

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

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

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

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

    展开全文
  • c++ 内容集合

    2019-08-09 11:45:20
  • 编制一个能演示执行集合的并、交和差运算的程序。...这里运用的是c++语言进行编程,采用顺序表来记录集合及其元素个数,同时顺序表采用动态分布空间;然后,使用多个子函数、一个主函数的方法进行运算,即编写并运算...

    编制一个能演示执行集合的并、交和差运算的程序。

    一.

    该课题研究的是:设计程序实现集合的并、交、差和补的混合运算;同时,可以进行集合中元素的判定、集合子集的判定和求集合的补集;还可以对不同元素类型的集合进行运算,如整数、浮点数和字符型等。

    这里运用的是c++语言进行编程,采用顺序表来记录集合及其元素个数,同时顺序表采用动态分布空间;然后,使用多个子函数、一个主函数的方法进行运算,即编写并运算、交运算、差运算等多个子函数,在main函数中进行调用即可。同时,在主函数中使用while循环进行连续运算和混合运算,并采用switch—case选择方法进行不同运算的判定。

    在该课题中,用顺序表来记录集合中的元素及个数使整个程序看起来更加简单易懂。

    通过完成该课题,我对运用c++语言完成编程的能力得到提升,同时,对顺序表有了更加深刻的认识。

    完成课题的编程后,运行程序可以演示以用户和计算机的对话方式来执行的集合运算,操作者可以根据运行窗口中的提示来完成相关的集合运算。

    通过该课题,我对编程有了新的认识,想要自己编写的程序完美无缺,必须牢牢掌握编程语言的基础知识和注意程序的细节。

    二.

    本设计程序用C++语言编写,完成集合的并、交、差和补运算,同时,可以完成集合元素的判定、集合子集的判定和集合的混合运算。

    • 集合的元素限自行定义,即自己用键盘输入集合的元素。
    • 演示程序以用户和计算机的对话方式执行。
    • 集合的元素类型推广到其他类型,甚至任一类型。
    • 可实现集合的元素判定和子集判定运算。
    • 可实现集合的混合运算表达式求解。

       

    三. 

     在本课题设计中,系统开发平台为Windows2000,程序设计语言为C++,程序的运行环境为Visual C++ 6.0. Visual C++一般分为三个版本;学习版、专业版和企业版,不同的版本适合于不同类型的应用开发。实验中可以使用这三个版本的任意一种,在本课题设计中,选择Visual C++ 6.0为编程环境。

      Microsoft Visual C++ 6.0是Microsoft公司的Microsoft Visual Studio 6.0开发工具箱中的一个C++程序开发包。Visual C++包中除包括C+ +编译器外,还包括所有的库、例子和为创建Windows应用程序所需要的文档。自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具,VisualC++从最早期的1.0版本,发展到最新的7.0版本,Visual C++已经有了很大的变化,在界面、功能、支持方面都有许多的增强。最新的7.0版本在编译器、MFC类库、编辑器以及联机帮助系统等方面都比以前的版本做了较大改进。

      虽然微软公司推出T Visual C++ NET(Visual C++7.0),但它的应用的很大的局限性,只适用 于Windows 2000. Windows XP和Windows NT4.0.所以实际中,更多的是以Visual C++6.0为平台。

      Visual C++ 6.0是Microsoft公同推出的目前使用最广泛的基于Windows平台的可视化编程环境Visual C++ 60是在以往版本不断更新的基础上形成的,由于其功能强大,灵活性好以及有强大的Internet支持,因而在各种C+讲言开发工具中脱颖面出。成为目前最为流行的C++语言集成开发环境。

    同时,Visual C++ 6.0秉承Visual C++以前版本的优异特性,为用户提供了一套良好的可视化开发环境:主要包括文本编辑器、资源编辑器、工程创建工具、Debugger调试器等等。用户可以在集成开发环境中创建工程、打开工程、建立、打开和编辑文件、编译、链接、运行、调试应用程序。

    四.

    设计程序采用的数据逻辑结构是线性结构,即线性表;采用的数据储存结构是顺序储存结构,即顺序表。

    线性表的顺序储存结构是最常用的储存方法,它直接将线性表的逻辑结构映射到存储结构上,既便于理解,又容易实现。线性表的实现存储结构即顺序表是把线性表中的所有元素按照其逻辑顺序依次存储到从计算机存储器中指定存储位置开始的一块连续的存储空间中,如下图所示;由于线性表中逻辑上相邻的两个元素在对应的顺序表中它们的存储位置也是相邻的,所以这种映射称为直接映射。

     

     

    五. 

    在函数前有1个声明、1个结构体类型和1个自定义(新的数据类型名的指定)

    (1)#define max 1000;

    声明集合中元素的个数的最大值,以便定义数组的大小。

    (2)typedef struct

    {

    type data[max];

    int length;

    }list;

    这是一个关于顺序表的结构体,其中data数组用来存储线性表中的所有元素,还有整型变量length用来存储线性表的实际长度,并用结构体类型list来表示这个整体。

                 typedef char type;

    将char类型与type等同起来,以便设置集合的元素类型;将代码较长的结构体类型声明用自定义类型标识符来代替,这样可以简化代码,提供便捷。

     

     本程序包含6函数和1个主函数

     

    (1)建立顺序表函数void List(list *&l,type a[],int n):

    参数:list *&l:引用一个顺序表指针l;type a[]:传入一个type型数组a;int n:传入一个整型变量n,用来传入集合中元素的个数。

    作用:用来建立一个顺序表,即表示一个集合。该函数虽然是void类型的函数,但是当调用该函数创建完成l所指定的顺序表后,因为使用了引用符“&”,所以会回传给对应的实参。

    集合的并运算函数void un(list *&l,list *p)

    参数:list *&l:引用一个顺序表指针l;list *p:一个顺序表指针p;即表示传入两个集合。

    作用:用来实现两个集合的并运算。即输出所有属于顺序表l或顺序表p的元素。集合的并运算即求两个集合的并集:AB是两个集合,则

                   AB={x|(x∈A)或(x∈B)}

    仍是一个集合,称它为AB的并集。

    集合的交运算函数void jiao(list *&l,list *p)

    参数list *&l:引用一个顺序表指针l;list *p:一个顺序表指针p;即表示传入两个集合。

    作用:用来实现两个集合的交运算。即输出所有既属于顺序表l又属于顺序表p的元素。集合的交运算即求两个集合的交集:AB是两个集合,则

               AB={x|(x∈A)并且(x∈B)}

    仍是一个集合,称它为AB的交集。

    集合的差运算或求集合的补集函数void chabu(list *&l,list *p)

    参数:list *&l:引用一个顺序表指针l;list *p:一个顺序表指针p;即表示传入两个集合。 l表示被减的集合,p表示要减去的集合;或l表示全集,p表示要求补集的集合。

    作用:用来实现两个集合的差运算或求集合的补集。即输出所有属于顺序表l但不属于顺序表p的元素,即只属于顺序表l的元素。集合的差运算或求集合的补集即求两个集合的差集:AB是两个集合,则

               A-B={x|(x∈A)并且(x不属于B)}

    仍是一个集合。称它为AB的差集,A-B又可叫相对补集。

     

    判定集合的元素函数void pand(list *l,type y)

    参数:list *l:一个顺序表l,即表示传入一个集合;type y:传入一个type型变量y,表示要判定的元素。

    作用:用来实现集合中元素的判定。即判断顺序表l中是否又元素y,然后输出判断结果。

    集合子集的判定函数void ziji(list *l,list *p)

    参数:list *&l:一个顺序表指针l;list *p:一个顺序表指针p;即表示传入两个集合。l表示可能有这个要判定的子集的集合;p表示要判定的子集。

    作用:用来实现集合子集的判定。即判定顺序表l中是否包含了顺序表p中的所有元素,然后输出判定结果。子集:设A、B两个集合,如果集合A的任意一个元素都是集合B的元素(任意aAaB),那么集合A称为集合B子集

    主函数int main():

    无参;

    作用:用来调用各个子函数进而实现集合的相关运算。即在运行窗口中输出相关的提示,再用switch—case来判断情况,然后根据情况调用相应函数进行相关的集合运算进而输出运算结果;用while()循环来实现集合的混合运算,即在其中循环调用集合的运算来实现集合的混合运算。

    各函数间关系如下:

     

     

    展开全文
  • c++ 中的集合

    千次阅读 2014-03-28 09:44:04
    概述 list /* * array.cpp * * Created on: 2014-3-21 * Author: Administrator */ #include #include #include #include #include using namespace std;...// compare only integral part:
  • C++集合类简介

    千次阅读 2019-03-05 00:02:25
    STL   STL是Standard Template Library的简称,中文名标准模板库,惠普实验室... 从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器...
  • C++的STL中集合(set)的使用说明

    万次阅读 2016-09-18 17:34:15
    文章转载自:http://www.cnblogs.com/yaoyueduzhen/p/4536929.htmlset,顾名思义,就是数学上的集合——每个元素最多只出现一次,并且set中的元素已经从小到大排好序。头文件:#include常用操作:begin() 返回set...
  • C++ 求两个集合的交集和并集

    万次阅读 2017-06-18 22:23:28
    先学会用法吧,具体的以后看C++ Primer #include using namespace std; set s1{1,2,3,5}; set s2{5,7,9}; int main(void) { vector ANS; set_union(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(ANS,ANS.b
  • c++ set集合的使用方法详解

    万次阅读 多人点赞 2017-04-25 15:34:57
    set集合c++ stl库中自带的一个容器,set具有以下两个特点: 1、set中的元素都是排好序的 2、set集合中没有重复的元素 常用操作: begin() 返回set容器的第一个元素的地址 end() 返回set容器的最后一个元素...
  • c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。1) 不能直接改变元素值,因为那样会打乱原...
  • C++中map的遍历的代码

    万次阅读 2019-02-02 14:31:01
    正确写法是: std::map&lt;int, TaskInfo*&gt; maps; //以下循环是错误的.因为KEY不是顺序号 //for(int i=0; i&lt;maps.size(); i++) //TaskInfo* pInfo = maps[ i ];...int, TaskInfo*...
  • c/c++ hash表 (哈希表、字典表)

    万次阅读 2018-01-30 10:10:05
    表 1: 表: 存储数据 key –> value; 2: 表存储数据结构的困难: 怎么查找? 一个一个key去比较去查找?...Hash算法将字符串转成整数,同样的Hash值得 key:value会放到一个集合里面,由于Hash能使得不同的字符串
  • C++集合操作之集合交集:std::set_intersection 算法set_intersection可以用来求两个集合的交集,此处的集合可以为std::set,也可以是std::multiset,但是不可以是hash_set以及hash_multiset。为什么呢?因为set_...
  • C++ set用法总结(整理)

    万次阅读 多人点赞 2020-09-23 10:06:17
    顺序容器包括vector、deque、list、forward_list、array、string,所有顺序容器都提供了快速顺序访问元素的能力。 关联容器包括set、map 关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和...
  • STL/C++__中 set(集合) 删除元素

    千次阅读 2015-10-10 15:01:40
    #include using std::set; int main(int argc,char *argv[]) { set s; set::iterator it; s.insert(1); s.insert(2); s.insert(3); for(it=s.begin();it!=s.end();){ if((*it)%2==0) ...
  • c++中容器set的去除重复元素排序

    千次阅读 2018-08-22 15:28:05
    c++ stl集合set介绍  c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。 1) 不能直接改变元素值,因为那样会...
  • C++STL之集合的交集与并集

    千次阅读 2018-10-12 10:09:37
    需要头文件 #include &lt;algorithm&gt; #include &lt;set&gt;...set_union(all(s1), all(s2), ins(sR))把s1与s2的并集以插入的形式给sR set_intersection(all(s1), all(s2), ins(sR))把s1与...
  • c++ stl

    千次阅读 多人点赞 2010-07-07 09:29:00
    C++ Algorithms C++ Vectors C++ Double-Ended Queues C++ Lists C++ Priority Queues C++ Queues C++ Stacks C++ Sets C++ Multisets C++ Maps ...
  • 作用:判断元素是否在集合set中 返回值:存在返回1个,不存在返回0个。 测试代码: set<int> ss; ss.insert(1); ss.insert(2); cout<<ss.count(1)<<' '<<ss.count(3); 结果: ...
1 2 3 4 5 ... 20
收藏数 220,226
精华内容 88,090
关键字:

c++集合