C++ multiset容器用法归纳
2021/8/5 1:08:14
本文主要是介绍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能够在插入元素的时候自动去比较已有的元素(重载运算符)。
这篇关于C++ multiset容器用法归纳的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享