zoukankan      html  css  js  c++  java
  • #include <set>

    1 multiset

    多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>

    2 set

    集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 <set>

    1 count

    统计数量

    2 equal_range(const T&);找到红黑树的链表结点,遍历所有的元素

    3 find();查找元素

    4 insert(const T&);插入

    5 size();返回当前向量中已经存放的对象的个数

    1 multiset

    多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>

     1 #include <iostream>
     2 #include <set>
     3 
     4 int main()
     5 {
     6     std::multiset<int>myset;
     7 
     8     myset.insert(11);
     9     myset.insert(12);
    10     myset.insert(13);
    11     myset.insert(10);
    12     myset.insert(10);
    13     myset.insert(100);//和set不同,元素可以重复
    14 
    15     auto ib = myset.begin();
    16     auto ie = myset.end();
    17 
    18     for (; ib != ie; ib++)
    19     {
    20         std::cout << *ib << std::endl;
    21         printf("%p,%p
    ", ib._Ptr, ib);//智能指针
    22     }
    23 
    24     return 0;
    25 }

    multiset每一个结点都是一个链表,set每个结点是一个结点而已

     1 #include <iostream>
     2 #include <set>
     3 
     4 struct student
     5 {
     6     int id;
     7     char name[30];
     8 };
     9 
    10 struct stuless
    11 {
    12     bool operator()(const student &s1, const student &s2)//重载()
    13     {
    14         return s1.id < s2.id;
    15     }
    16 };
    17 
    18 int main()
    19 {
    20     student sarray[3] = { {10,"hello"},{ 3,"world" },{ 4,"hello world" } };
    21     std::multiset<student, stuless>myset(sarray, sarray + 3, stuless());//multiset每一个结点都是一个链表,set每个结点是一个结点而已
    22 
    23     student stu1 = { 20,"world hello" };
    24 
    25     myset.insert(stu1);//插入
    26 
    27     auto ib = myset.begin();
    28     auto ie = myset.end();
    29 
    30     for (; ib != ie; ib++)
    31     {
    32         std::cout << ib->id << " " << ib->name << std::endl;
    33     }
    34     
    35     return 0;
    36 }

    multiset的元素可以重复,因此equal_range(const T&);可以实现查找多个相同的元素

     1 #include <iostream>
     2 #include <set>
     3 
     4 void main()
     5 {
     6     std::multiset<int>myset;
     7 
     8     myset.insert(100);//插入
     9     myset.insert(101);
    10     myset.insert(100);
    11     myset.insert(103);
    12     myset.insert(100);
    13 
    14     auto pfind = myset.find(101);//find只查找一个元素
    15     std::cout << *pfind << std::endl << std::endl;
    16 
    17     auto allfind = myset.equal_range(100);//equal_range找到红黑树的链表结点,遍历所有的元素
    18 
    19     for (auto it = allfind.first; it != allfind.second; it++)//first是链表的头结点,second是最后一个空结点
    20     {
    21         std::cout << *it << std::endl;
    22     }
    23 }

    count

     1 #include <iostream>
     2 #include <set>
     3 
     4 void main()
     5 {
     6     std::multiset<int>myset;
     7 
     8     myset.insert(3);
     9     myset.insert(1);
    10     myset.insert(2);
    11     myset.insert(1);
    12     myset.insert(2);
    13     myset.insert(1);
    14     myset.insert(2);
    15     myset.insert(1);
    16 
    17     int i = 0;
    18     for (auto ib = myset.begin(), ie = myset.end(); ib != ie; ib++)
    19     {
    20         i++;
    21     }
    22 
    23     std::cout << i << std::endl;//打印结点数量
    24 
    25     std::cout << count(myset.begin(), myset.end(), 1);//打印结点元素是1的数量
    26 }

    multiset可以自动排序

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <set>
     4 
     5 template <class T>
     6 struct show
     7 {
     8 public:
     9     void operator()(T &t)
    10     {
    11         std::cout << t << " ";
    12     }
    13 };
    14 
    15 void main()
    16 {
    17     std::multiset<int>myset;
    18 
    19     myset.insert(3);
    20     myset.insert(1);
    21     myset.insert(2);
    22     myset.insert(1);
    23     myset.insert(2);
    24     myset.insert(1);
    25     myset.insert(2);
    26     myset.insert(1);
    27 
    28     for_each(myset.begin(), myset.end(), show<const int>());
    29 }

    2 set

    集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 <set>

    find();查找元素

    size();返回当前向量中已经存放的对象的个数

     1 #include <iostream>
     2 #include <set>
     3 
     4 void main()
     5 {
     6     std::set<int>myset;//红黑树
     7 
     8     myset.insert(10);
     9     myset.insert(9);
    10     myset.insert(8);
    11     myset.insert(7);
    12     myset.insert(6);
    13     myset.insert(5);
    14     myset.insert(4);
    15     myset.insert(10);//如果插入的元素已经存在,将会放弃插入
    16 
    17     auto ib = myset.begin();
    18     auto ie = myset.end();
    19 
    20     for (; ib != ie; ib++)//即使插入的顺序是乱序,但是也会按从小到大的顺序输出
    21     {
    22         std::cout << *ib << std::endl;
    23     }
    24 }

    find查找元素

     1 #include <iostream>
     2 #include <set>
     3 
     4 void main()
     5 {
     6     std::set<int>myset;//红黑树
     7 
     8     myset.insert(10);
     9     myset.insert(9);
    10     myset.insert(8);
    11     myset.insert(7);
    12     myset.insert(6);
    13     myset.insert(5);
    14     myset.insert(4);
    15 
    16     auto findpos = myset.find(10);
    17 
    18     std::cout << *findpos << std::endl;
    19 }

    size();返回当前向量中已经存放的对象的个数

     1 #include <iostream>
     2 #include <set>
     3 
     4 void main()
     5 {
     6     std::set<int>myset;//红黑树
     7 
     8     myset.insert(10);
     9     myset.insert(9);
    10     myset.insert(8);
    11     myset.insert(7);
    12     myset.insert(6);
    13     myset.insert(5);
    14     myset.insert(4);
    15     myset.insert(10);//如果插入的元素已经存在,将会放弃插入
    16 
    17     std::cout << myset.size() << std::endl;//返回当前向量中已经存放的对象的个数
    18 }

    红黑树,处理纯数字非常少,处理类对象以及字符串

    pari起到获取插入返回值,第一个类型,类型比大小的方式

     1 #include <iostream>
     2 #include <set>
     3 #include <string>
     4 
     5 struct strless
     6 {
     7     bool operator()(const char *str1, const char *str2)//重载()
     8     {
     9         return strcmp(str1, str2) < 0;
    10     }
    11 };
    12 
    13 //红黑树,处理纯数字非常少,处理类对象以及字符串
    14 
    15 int main()
    16 {
    17     const char *cmd[] = { "abc", "calc", "notepad", "const", "xyz", "ghi" };
    18 
    19     std::set<const char *, strless>myset(cmd, cmd + 6, strless());//构造
    20     myset.insert("1234");//插入
    21     myset.insert("4567");
    22 
    23     std::pair<std::set<const char *>::iterator, bool>p = myset.insert("9876");//pari起到获取插入返回值,第一个类型,类型比大小的方式
    24 
    25     auto ib = myset.begin();
    26     auto ie = myset.end();
    27 
    28     for (; ib != ie; ib++)//迭代器访问
    29     {
    30         std::cout << *ib << std::endl;
    31     }
    32     std::cout << std::endl;
    33 
    34     auto rb = myset.rbegin();
    35     auto re = myset.rend();
    36 
    37     for (; rb != re; rb++)//反向迭代器访问
    38     {
    39         std::cout << *rb << std::endl;
    40     }
    41     std::cout << std::endl;
    42 
    43     std::set<const char *, strless>::iterator pfind = myset.find("calc");//查找
    44     std::cout << *pfind << std::endl;
    45 
    46     return 0;
    47 }
  • 相关阅读:
    Python利用Remove.bg接口自动消除图片背景
    解决ajxa跨域问题
    CentOS7 修改静态IP
    CentOS下 安装composer 与tp5.1
    centon 安装php-fpm+Nginx
    win10 安装selenium和使用
    Scrapy 爬虫框架入门
    Python 异常处理
    selenium和phantomjs的介绍
    MongoDB入门
  • 原文地址:https://www.cnblogs.com/denggelin/p/5745280.html
Copyright © 2011-2022 走看看