ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++ multiset容器用法归纳

2021-08-04 23:02:16  阅读:183  来源: 互联网

标签:返回 end 迭代 元素 elem C++ 用法 multiset


C++中multiset容器是STL模板<set>库中一个非常有用的类型,它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成,而且他能时刻保证序列中的数是有序的,而且序列中可以存在重复的数(而set容器要求两两不同,且不保证有序)。

常用成员函数

insert(elem):添加一个elem副本,返回新元素位置,无论插入成功与否。

insert(pos, elem):添加一个elem元素副本,返回新元素位置,pos为收索起点,提升插入速度。

insert(beg,end):将区间[beg,end)所有的元素安插到my_multiset,无返回值。

erase(elem):删除与elem相等的所有元素,返回被移除的元素个数。

erase(pos):移除迭代器pos所指位置元素,无返回值。

erase(beg,end):移除区间[beg,end)所有元素,无返回值。

clear():移除所有元素,将容器清空。

begin():返回一个随机存取迭代器,指向第一个元素。

end():返回一个随机存取迭代器,指向最后一个元素的下一个位置。

rbegin():返回一个逆向迭代器,指向逆向迭代的第一个元素。

rend():返回一个逆向迭代器,指向逆向迭代的最后一个元素的下一个位置。

查找函数

count (elem):返回元素值为elem的个数。

find(elem):返回元素值为elem的第一个元素,如果没有返回end()。

lower _bound(elem):返回元素值为elem的第一个可插入位置,也就是元素值 >= elem的第一个元素位置。

upper _bound (elem):返回元素值为elem的最后一个可插入位置,也就是元素值 > elem 的第一个元素位置。

equal_range (elem):返回elem可插入的第一个位置和最后一个位置,也就是元素值==elem的区间。

自定义multiset比较器

不只是int类型,multiset还可以存储其他的类型诸如 string类型,结构体(struct)或类(class)类型。而我们一般在编程当中遇到的问题经常用到自定义的类型,即struct或class。例如下面的例子:

struct student{
  int h,w; }; multiset<student>s;

由于multiset并不知道如何去比较一个自定义的类型。可以定义multiset里面student类型变量之间的小于关系的含义(这里以h为第一关键字为例),具体过程如下:

定义一个比较类cmp,cmp内部的operator函数的作用是比较student类型h和w的大小(以h为第一关键字,w为第二关键字):

struct cmp{
    bool operator()(const student&s1,const student&s2){
        return s1.h<s2.h||s1.h==s2.h&&s1.w<s2.w;
    }
};

 然后将语句"multiset<student>s"改成"multiset<student,cmp>s"这样以后,就使序列s能够在插入元素的时候自动去比较已有的元素(重载运算符)。

标签:返回,end,迭代,元素,elem,C++,用法,multiset
来源: https://www.cnblogs.com/JCpeng/p/15101214.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有