multiset多重集合容器
跟set集合容器相比,multiset多重集合容器也使用红黑树组织元素,仅仅是multiset多重集合容器同意将反复的元素键值插入。元素的搜索依旧具有对数级的算法时间复杂度,find和equal_range函数能够搜索出某一键值下的全部元素位置。
创建multiset对象
有下面几种方式。
(1) multiset()
multiset<int> ms;
(2) multiset(constkey_compare&cmp)
//student结构体
structstudent{
int id;
char *name;
};
//比較函数
structstuLess{
bool oprator()(const student &s1,conststudent &s2){
return s1.id<s2.id;
}
};
//创建multiset对象
multiset<student,stuLess> ms(stuLess);
(3) multiset(const multiset&)
//multiset<int> ms1;
multiset<int> ms2(ms1);
(4) miltiset(InputIteratorfirst,InputIterator last)
int array[]={1,2,3,4,5};
multiset<int> ms(array,array+5);
(5) miltiset(InputIteratorfirst,InputIterator last, const key_compare&cmp)
student stuArray[]={{1,”li”},{2,”shi”},{3,”wang”}};
multiset<student,stuLess> ms(stuArray,stuArray+3,stuLess());
插入
multiset的插入函数与set类似,一般用insert。有三种形式。
(1) iterator insert(constvalue_type&v)
(2) iterator insert(iterator pos, constvalue_type&v)
(3) void insert(InputIteratorfirst,InputIterator last)
删除
multiset的元素删除与set容器的删除全然一致,主要是erase和clear函数。
遍历
利用迭代器进行遍历訪问元素。
#include<iostream>
#include<set>
using namespace std;
int main()
{
multiset<int> ms;
//无序输入
ms.insert(1);
ms.insert(21);
ms.insert(11);
ms.insert(10);
ms.insert(9);
ms.insert(9);
multiset<int>::iterator begin,end;
end=ms.end();
for(begin=ms.begin();begin!=end;begin++)
{
cout<<*begin<<" ";//有序输出
}
cout<<endl;
return 0;
}
反向遍历
利用反向迭代器reverse_iterator和const_reverse_iterator进行反向迭代,降序输出。
#include<iostream>
#include<set>
using namespace std;
int main()
{
multiset<int> ms;
ms.insert(1);
ms.insert(1);
ms.insert(5);
ms.insert(4);
ms.insert(1);
multiset<int>::reverse_iterator rbegin,rend;
rend=ms.rend();
for(rbegin=ms.rbegin();rbegin!=rend;rbegin++)
{
cout<<*rbegin<<" ";
}
cout<<endl;
return 0;
}
元素的搜索
find函数返回第一个搜索到的元素的位置,假设元素不存在,则返回end结束元素位置。
equal_range函数则返回一个能够指示相等元素范围区间的pair对象。原型例如以下:
(1) iterator find(constkey_type&k)
(2) pair<iterator,iterator>equal_range(constkey_type&k)
返回一个pair对象。其first变量值为lower_bound(k),second变量值为upper-bound(k),分别指向大于等于k(x>=k)和大于k(x>k)的第一个元素位置。即给出相等元素的位置范围。
#include<iostream>
#include<set>
using namespace std;
int main()
{
multiset<int> ms;
ms.insert(11);
ms.insert(21);
ms.insert(10);
ms.insert(11);
ms.insert(11);
ms.insert(11);
ms.insert(9);
int v=9;
multiset<int>::iterator i_v=ms.find(v);
cout<<*i_v<<endl;
v=11;
pair<multiset<int>::iterator,multiset<int>::iterator>p=ms.equal_range(v);
cout<<"大于等于"<<v<<"的第一个元素为"<<*p.first<<endl;
cout<<"大于"<<v<<"的第一个元素为"<<*p.second<<endl;
//打印反复键值元素11
multiset<int>::iterator i;
cout<<"键值为"<<v<<"的全部元素为";
for(i=p.first;i!=p.second;i++)
{
cout<<*i<<" ";
}
return 0;
}
其它函数
其它经常使用的函数有empty、size、count、lower_bound、upper_bound等。
multiset多重集合容器的更多相关文章
- multiset多重集合容器(常用的使用方法总结)
关于C++STL中multiset集合容器的学习,看别人的代码一百遍,不如自己动手写一遍. multiset多重集合容器和set集合容器的使用方法大多相同,不同的是multiset多重集合容器允许重复 ...
- C++STL之multiset多重集合容器
multiset多重集合容器 multiset与set一样, 也是使用红黑树来组织元素数据的, 唯一不同的是, multiset允许重复的元素键值插入, 而set则不允许. multiset也需要声明 ...
- Multiset ------ 多重集合
Multiset的中文名是多重集合,其实就是集合的扩展版.唯一的不同是集合中一个值只能出现一次,而多重集合中一个值可以出现多次. 粗略看了看MSDN,在STL中,multiset和set的成员函数声明 ...
- multiset基础学习,可以有重复类型的多重集合容器
#include <set> #include <iostream> using namespace std; struct Student { char *name; int ...
- C++STL之set集合容器
set集合容器 set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构, 在 插入元素时, 它会自动调整二叉树的排列, 把该元素放到适当的位置, 以确保每个子树根节点的键 ...
- C++ STL set集合容器
汇总了一些set的常用语句,部分参考了这篇:http://blog.163.com/jackie_howe/blog/static/199491347201231691525484/ #include ...
- Codeforces Round #523 (Div. 2) D. TV Shows 模拟(多重集 先把所有区间加入多重集合)+贪心+二分
题意:给出n个电视节目的起始和结束时间 并且租一台电视需要x +y*(b-a) [a,b]为时段 问完整看完电视节目的最小花费是多少 思路:贪心的思想 情况1 如果新租一台电视的花费<=在空 ...
- python 标准类库-数据类型之集合-容器数据类型
标准类库-数据类型之集合-容器数据类型 by:授客 QQ:1033553122 Counter对象 例子 >>> from collections import Counter ...
- set集合容器(常用的使用方法总结)
关于C++STL中set集合容器的学习,看别人的代码一百遍,不如自己动手写一遍. 构造set集合容器的目的是为了去重+排序+快速搜索.由于set集合容器实现了红黑树多的平衡二叉检索树的数据结构,在插 ...
随机推荐
- VMware 安装LINUX系统(一)
我用的是WORKSTATION 15 PRO https://www.vmware.com/asean/products/workstation-pro/ 1.安装LINUX 打开Vmware,点击创 ...
- WRAR下载及注册
下载过程: 1.打开winrar官网:https://www.win-rar.com 2.点击下载winrar按钮,如上图所示 3.进入下一页面,点击下载按钮即可完成下载过程 注册过程:https:/ ...
- hdu 3729 最大匹配
此题是我AC的HDU的201道题目.泪流满面啊! 字典序最大(最小)真是个烦人的东西. 学生i与其对应的分数区间的每个点连一条边.字典序最大,编号最大的学生开始匹配. HK无法AC啊,试了很久.我不会 ...
- 管窥python语法
刚接触python,mark下所见所得: 1.Python调用底层API,可在任何platform上运行,包括Windows.Mac.Unix: 2.用#符号对代码或语句进行注释,#后的代码不被编译: ...
- WebService 服务接口
天气预报Web服务,数据来源于中国气象局Endpoint :http://www.webxml.com.cn/WebServices/WeatherWebService.asmxDisco :http ...
- 使用postman模拟登录请求
Cookie 可以写在Headers里面
- PythonGIS可视化—Matplot basemap工具箱
原文链接:http://www.douban.com/group/topic/32821988/ 原文链接:http://www.cnblogs.com/vamei/archive/2012/09/1 ...
- 文字纵向滚动marquee
<div style="width:200px; height:300px"><marquee direction="up" truespee ...
- 补充01 Django 类视图
视图 函数视图[Function Base View] 以函数的方式定义的视图称为函数视图,函数视图便于理解.但是遇到一个视图对应的路径提供了多种不同HTTP请求方式的支持时,便需要在一个函数中编写不 ...
- centos7常见的操作
centos7的网络IP地址配置文件在 /etc/sysconfig/network-scripts 文件夹下, 查看当前网卡名称 ip ad li ens33网卡对应的配置文件为ifcfg-ens ...