博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
multiset多重集合容器
阅读量:6245 次
发布时间:2019-06-22

本文共 2708 字,大约阅读时间需要 9 分钟。

跟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
#include
using namespace std;int main(){ multiset
ms; //无序输入 ms.insert(1); ms.insert(21); ms.insert(11); ms.insert(10); ms.insert(9); ms.insert(9); multiset
::iterator begin,end; end=ms.end(); for(begin=ms.begin();begin!=end;begin++) { cout<<*begin<<" ";//有序输出 } cout<

反向遍历

利用反向迭代器reverse_iterator和const_reverse_iterator进行反向迭代,降序输出。

#include
#include
using namespace std;int main(){ multiset
ms; ms.insert(1); ms.insert(1); ms.insert(5); ms.insert(4); ms.insert(1); multiset
::reverse_iterator rbegin,rend; rend=ms.rend(); for(rbegin=ms.rbegin();rbegin!=rend;rbegin++) { cout<<*rbegin<<" "; } cout<

元素的搜索

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
#include
using namespace std;int main(){ multiset
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
::iterator i_v=ms.find(v); cout<<*i_v<
::iterator,multiset
::iterator>p=ms.equal_range(v); cout<<"大于等于"<
<<"的第一个元素为"<<*p.first<
::iterator i; cout<<"键值为"<
<<"的全部元素为"; for(i=p.first;i!=p.second;i++) { cout<<*i<<" "; } return 0;}

其它函数

其它经常使用的函数有empty、size、count、lower_bound、upper_bound等。

你可能感兴趣的文章
接口测试-python
查看>>
python使用hbase
查看>>
我太水了~
查看>>
Mysql-proxy中的lua脚本编程(一)
查看>>
SY-SUBRC 的含义【转】
查看>>
仓库管理系统用例建模
查看>>
转换数字为人民币大写金额
查看>>
Python爬虫之爬取西刺免费IP并保存到MySQL
查看>>
PostgreSQL的进程结构
查看>>
[HBase_2] HBase数据模型
查看>>
Android之Sqlite数据库
查看>>
高并发编程-CountDownLatch深入解析
查看>>
Sublime 中文标题乱码
查看>>
世界上最幸福的职业-鉴黄师
查看>>
asp.net 10 Cookie & Session
查看>>
[置顶]C# 邮件发送方法【NetMail方式】
查看>>
一个数据库系统的笔试题
查看>>
使用Form个性化修改标准Form的LOV
查看>>
第二阶段冲刺06
查看>>
六、input框中的数字(金额)只能输入正整数
查看>>