与set集合容器一样,multiset多重集合容器也使用红黑树组织元素数据,只是multiset容器允许将重复的元素健值插入,而set容器则不允许。

set容器所使用的C++标准头文件set,其实也是multiset容器的头文件,因为这个set头文件也包含multiset所需的红黑树和自身实现文件,只要用宏语句“#include<set>”包含进来,就可对multiset容器的应用代码进行编译。

创建multiset对象

与set容器一样,multiset容器提供如下构造函数,创建multiset对象来管理内部红黑树中的节点元素数据。

1.  set(); 用默认的 less<T>函数对象和内存分配器,创建一个没有任何数据元素的 set对象。

2.  set(constkey_compare& comp); 指定一个比较函数对象comp 来创建 set 对象,内存分配器为默认值。

3.  set(constset&);  set拷贝构造函数,通过红黑树的拷贝构造函数,实现两个set容器的元素、头节点和节点个数的拷贝。

4.  set(InputIteratorfirst, InputIteratorlast); 用迭代器区间 [first, last)所指的元素,创建一个 set对象。

5.  set(InputIteratorfirst,InputIterator last, const key_compare& comp);//用迭代器区间 [first, last)所指的元素和comp函数对象,创建一个 set对象。

#include <iostream>
#include <set>
using namespace std;bool fncomp (int lhs, int rhs) {return lhs<rhs;}struct classcomp
{bool operator() (const int& lhs, const int& rhs) const{return lhs<rhs;}
};
//5种创建multiset对象的方式
int main ()
{multiset<int> first;                         int myints[]= {10,20,30,20,20};multiset<int> second (myints,myints+5);      multiset<int> third (second);                multiset<int> fourth (second.begin(), second.end()); multiset<int,classcomp> fifth;              return 0;
}

元素的插入和删除及搜索

multiset容器元素的插入和删除、搜索与set容器一致,具体可以参考上篇set容器的应用。

其他函数

count(); 返回指向某个值元素的个数

#include <iostream>
#include <set>
using namespace std;
int main ()
{intmyints[]={10,73,12,22,73,73,12};multiset<int>mymultiset (myints,myints+7);cout<< "73 appears " << mymultiset.count(73) << "times in mymultiset.\n";return0;
}

empty(); 如果集合为空,返回true

equal_range(); 返回集合中与给定值相等的上下限的两个迭代器

find(); 返回一个指向被查找到元素的迭代器

get_allocator(); 返回多元集合的分配器

#include <iostream>
#include <set>
using namespace std;
int main ()
{multiset<int>mymultiset;int* p;unsignedint i;//用get_allocator申请含义个元素的内存空间p=mymultiset.get_allocator().allocate(5);//对内存空间进行赋值for(i=0; i<5; i++) p[i]=(i+1)*10;cout<< "所申请的数组空间包含元素::";for(i=0; i<5; i++)cout<< ' ' << p[i];cout<< '\n';//施放内存空间mymultiset.get_allocator().deallocate(p,5);return0;
}

key_comp(); 返回一个用于元素间值比较的函数,默认<

#include <iostream>
#include <set>
using namespace std;
int main ()
{multiset<int>mymultiset;for(int i=0; i<5; i++)mymultiset.insert(i);multiset<int>::key_comparemycomp = mymultiset.key_comp();cout<< "mymultiset contains:";inthighest = *mymultiset.rbegin();multiset<int>::iteratorit = mymultiset.begin();do{std::cout<< ' ' << *it;}while ( mycomp(*it++,highest) );cout<< '\n';return0;
}


lower_bound(); 返回指向大于(或等于)某值的第一个元素的迭代器

max_size(); 返回集合能容纳的元素的最大限值

size(); 多元集合中元素的数目

swap(); 交换两个多元集合变量

upper_bound(); 返回一个大于某个值元素的迭代器

value_comp(); 返回一个用于比较元素间的值的函数

转载请注明出处: http://blog.csdn.net/lsh_2013/article/details/46754979,谢谢合作!

stl之multiset容器的应用相关推荐

  1. C++STL的set/ multiset容器

    C++STL的set/ multiset容器 set基本概念 set大小和交换 set插入和删除 set查找和统计 set和multiset区别 pair对组创建 set容器排序 set基本概念 简介 ...

  2. c++STL标准模板库(关联式容器(set,multiset容器))

    关联式容器(associate容器)是STL提供的容器的一种,其中元素与序列容器不同的是它已经排过序,它主要通过关键字的方式来提高查询效率.关联式容器包含set.multiset.map.multim ...

  3. STL标准库-容器-set与map

    STL标准库-容器-set与multiset C++的set https://www.cnblogs.com/LearningTheLoad/p/7456024.html STL标准库-容器-map和 ...

  4. STL——关联式容器

    一.关联式容器 标准的STL关联式容器分为set(集合)/map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和 multimap(多键映射表).这些容器的底层机制均以RB-tre ...

  5. 【C++】【第六篇-2】【黑马 p215~p242】【list容器】【set/multiset容器】【map/multimap容器】【函数对象】【谓词】【内建函数对象】

    [C++][第六篇-2][黑马 p215~p242][list容器][set/multiset容器][map/multimap容器][函数对象][谓词][内建函数对象] 3.7 list容器(p215 ...

  6. 【C++ STL学习笔记】C++ STL序列式容器(array,vector,deque,list)

    文章目录 C++ STL容器是什么? 迭代器是什么,C++ STL迭代器(iterator)用法详解 迭代器类别 迭代器的定义方式 C++序列式容器(STL序列式容器)是什么 容器中常见的函数成员 C ...

  7. STL关联式容器详解

    STL关联式容器类别 1. map 定义在 头文件中,使用该容器存储的数据,其各个元素的键必须是唯一的(即不能重复),该容器会根据各元素键的大小,默认进行升序排序(调用 std::less). 2. ...

  8. STL中基本容器有: string、vector、list、deque、set、map

    为什么80%的码农都做不了架构师?>>>    在STL中基本容器有: string.vector.list.deque.set.map set 和map都是无序的保存元素,只能通过 ...

  9. STL 之 deque容器详解

    Deque 容器 deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容.deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中 ...

最新文章

  1. python 如何判断一组数据是否符合正态分布
  2. centos7安装uwsgi报错_如何将CentOS 7升级到CentOS 8
  3. php 数据库 加载图片,图片显示不出来,但是数据库里有显示
  4. 工业以太网交换机的产品性能有哪些呢?
  5. Codeforces 699D Fix a Tree 并查集
  6. 昂达vi40精英版刷Linux,昂达vi40精英版论坛_昂达vi40双核版刷机包_昂达平板vi40精英版...
  7. [Swift]判断字符串是否为空
  8. 《我喜欢生命本来的样子》周国平 .mobi .epub .pdf .azw3 电子版下载 读书笔记
  9. 苹果电脑桌面文件不见了怎么恢复
  10. java 错误: 无法将类 Customer中的构造器 Customer应用到给定类型
  11. 在VS中一个项目下两个以上源文件怎么通过编译
  12. 360wifi驱动linux驱动安装,ubuntu安装360随身wifi驱动
  13. 创业有感-表达能力很关键
  14. ggplot绘图之基本语法
  15. python写打飞机游戏
  16. java实现“进制转换-在线工具”
  17. 2022(核酸年)结束了
  18. 嵌套(Embeddings)
  19. 看漫画学python下载_用 Python 下载漫画
  20. PVTV2--Pyramid Vision TransformerV2学习笔记

热门文章

  1. c#获取屏幕上某坐标点的颜色
  2. 基于Android的人事管理系统 开发与设计
  3. 贺利坚老师汇编课程40笔记:指令里的数据在哪里有多长
  4. (重磅)最快的Hadoop完全分布式运行
  5. 结对项目:黄金点游戏(何珠赵艳)
  6. 怎么消除间隔间的空白字符
  7. ASP.NET MVC Html.BeginForm用法1
  8. pcie inbound、outbound及EP、RC间的互相訪问
  9. weblogic8.1在myeclipse中启动正常,在单独的weblogic中无法正常启动的解决方案.
  10. c#构造器的一点理解(三)