n次操作,插入元素、删除最小元素、查询最大元素并输出。
C++STL的multiset的使用
set——多元集合(元素不可重复),multiset——可重复元素的多元集合
多元集合(MultiSets)和集合(Sets)相像,只不过支持重复对象。(具体用法请参照set容器)
set和multiset内部是以平衡二叉树实现的:
从内部数据结构可以看出,它的中序遍历是一个有序序列,第一个元素为最小值,最后一个元素是最大值,而且所有STL操作复杂度都是O(logN)
begin()返回指向第一个元素的迭代器
clear()清除所有元素
count()返回指向某个值元素的个数
empty()如果集合为空,返回true
end()返回指向最后一个元素的迭代器
equal_range()返回集合中与给定值相等的上下限的两个迭代器
erase()删除集合中的元素
find()返回一个指向被查找到元素的迭代器
get_allocator()返回多元集合的分配器
insert()在集合中插入元素
key_comp()返回一个用于元素间值比较的函数
lower_bound()返回指向大于(或等于)某值的第一个元素的迭代器
max_size() 返回集合能容纳的元素的最大限值
rbegin()返回指向多元集合中最后一个元素的反向迭代器
rend()返回指向多元集合中第一个元素的反向迭代器
size()多元集合中元素的数目
swap()交换两个多元集合变量
upper_bound()返回一个大于某个值元素的迭代器
value_comp()返回一个用于比较元素间的值的函数
反向迭代器是一种反向遍历容器的迭代器。也就是,从最后一个元素到第一个元素遍历容器。反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++ 运算将访问前一个元素,而 – 运算则访问下一个元素。
//反向迭代器的声明
multiset<int>::reverse_iterator It;
//区别一般迭代器
multiset<int>::iterator it;
【图解】以vector容器的v.begin()、v.end()与v.rbegin() 、v.rend()为例,看一下他们指向的位置就很清楚了!
熟练multiset的insert(),erase(),rbegin()的使用即可,注意rbegin()返回的是一个反向迭代器,要提前声明好;erase(iterator) 传入的参数是一个迭代器;
/*====================================*|* STL 之 multiset *|
\*====================================*/
/*Author:Hacker_vision*/
#include<bits/stdc++.h>
#define clr(k,v) memset(k,v,sizeof(k))
using namespace std;
const int _max = 2e4 + 10;
int n,x,op;//op操作数;
multiset<int>ms;
multiset<int>::iterator it;
multiset<int>::reverse_iterator It;
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif // ONLINE_JUDGE
while(scanf("%d",&n)==1){
ms.clear();
for(int i = 0; i < n; ++ i){
scanf("%d",&op);
if(op==1){
scanf("%d",&x);
ms.insert(x);
}
else if(op==2){
it = ms.begin();//it指向multiset中最小元素(第一个)
if(ms.size()) ms.erase(it);//.erase(itetator it)参数数迭代器
}
else{
It = ms.rbegin();//it指向multiset中最大元素(最后一个)
if(ms.size()) printf("%d\n",*It);
else puts("0");
}
}
}
return 0;
}
Ctrl + B
Ctrl + I
Ctrl + Q
Ctrl + L
Ctrl + K
Ctrl + G
Ctrl + H
Ctrl + O
Ctrl + U
Ctrl + R
Ctrl + Z
Ctrl + Y
版权声明:本文为博主原创文章,未经博主允许不得转载。
【multiset】hdu 5349 MZL's simple problem
原文地址:http://blog.csdn.net/u012717411/article/details/47282871