zoukankan      html  css  js  c++  java
  • [STL] multiset

    RT,可重集合。

    它可以看成一个序列,插入一个数,删除一个数都能够在(O(logn))的时间内完成,并且时刻保证序列中的数是有序的,且序列中可以存在重复的数。

    头文件&定义

    #include<set>
    multiset<int> g;
    

    像其他类型的STL一样,它不仅仅能存(int)类型的变量。但是如果要存一个自定义类型的变量进去,需要重载<运算符。比如:

    struct node {
      int x,y;
      friend bool operator < (const node &a) const {
        return x<a.x;
      }
    };
    
    multiset<node> g;
    

    常用操作

    构造函数

    操作 效果
    multiset < type > name 产生一个multiset序列
    multiset < type,cmp > name 以cmp为排序准则,产生一个multiset序列
    name.~multiset() 销毁所有元素,释放内存

    非变动性函数

    操作 效果
    name.size() 返回name中元素个数
    name.empty() 返回name中是否存在元素

    搜寻函数

    查找为对数复杂度

    操作 效果
    name.count(x) 返回x的个数
    name.find(x) 返回multiset中x出现的第一个位置
    name.lower_bound(x) 返回第一个(geq x)的元素位置
    name.upper_bound(x) 返回最后一个(<x)的元素位置
    name.equal_range(x) 返回一个pair类型的迭代器,first表示x元素第一次出现的位置,second表示x元素最后一次出现的位置

    与迭代器相关函数(包括插入删除等)

    操作 效果
    name.begin() 返回第一个元素的迭代器
    name.end() 返回最后一个元素的下一个元素的迭代器
    name.insert(x) 插入x,并返回x所在位置的迭代器
    name.erase(x) 删除与x相等的所有元素
    name.erase(it) 删除迭代器it所指向的元素
    name.clear() 清空

    迭代器

    类似于一种指针(具体是不是指针我想不重要)反正就是一种工具

    先来关注它如何调用(以multiset为例)

    multiset<int>::iterator iter;
    

    这样是一个multiset的迭代器,它初始是空的。

    不同的STL的迭代器不同,比如说set的迭代器是

    set<int>::iterator iter;
    

    它支持一些操作

    • iter++ :值+1,其实就是指向了下一个元素
    • iter--:值-1,指向前一个元素
    • *iter :访问这个元素指向的值

    所以我们遍历multiset需要用到迭代器

    multiset<int> g;
    multiset<int>::iterator iter;
    for (iter=g.begin();iter!=g.end();iter++)
    ....
    

    其他

    事实上,建议大量运用迭代器删除元素时最好先用find找到迭代器中的元素返回的迭代器再删除,如果直接删除可能会出现奇怪的错误

    g[x].erase(g[x].find(*iter));
    

    参考资料

    二喵君

    gyro永不抽风

  • 相关阅读:
    Zabbix 配置笔记
    Centos7安装MySQL5.7和Redis6.0流水账
    Elasticsearch, Kibana安装
    服务治理 Service Mesh & Kubernetes & Spring Cloud的异同 侵入式 非侵入式
    文思海辉 华为 银行 ODS (oCRM)
    Java Profiler JavaMemoryLeak Arthas
    动物:人类、熊类、马类 团队精神 与 鼓励
    BPMN Sketch Miner https://design.inf.usi.ch/bpmn-sketch-miner/#
    Architecture, Design and Web Information Systems Engineering
    Cloud design patterns
  • 原文地址:https://www.cnblogs.com/FridayZ/p/13969149.html
Copyright © 2011-2022 走看看