C++ STL multiset容器
Posted 等待樱花盛开
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ STL multiset容器相关的知识,希望对你有一定的参考价值。
一、前言
multiset容器和set容器唯一的差别在于:multiset容器允许存储多个值相同的元素,而set容器中只能存储互不相同的元素。
multiset容器类模板定义:
template < class T, // 存储元素的类型
class Compare = less<T>, // 指定容器内部的排序规则
class Alloc = allocator<T> > // 指定分配器对象的类型
> class multiset;
multiset 类模板有3个参数,其中后2个参数自带有默认值。在实际使用中,我们最多只需要使用前2个参数即可,第3个参数不会用到。
二、创建multiset容器
multiset 类模板提供的构造函数,和 set 类模板中提供创建 set 容器的构造函数,是完全相同的。因此创建set容器的方式适用于创建multiset容器。具体的方法参考set容器:https://segmentfault.com/a/11...
三、方法
方法 | 说明 |
---|---|
begin() | 返回指向容器中第一个(注意,是已排好序的第一个)元素的双向迭代器。如果 multiset 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器 |
end() | 返回指向容器最后一个元素(注意,是已排好序的最后一个)所在位置后一个位置的双向迭代器,通常和 begin() 结合使用。如果 multiset 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器 |
rbegin() | 返回指向最后一个(注意,是已排好序的最后一个)元素的反向双向迭代器。如果 multiset 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。 |
rend() | 返回指向第一个(注意,是已排好序的第一个)元素所在位置前一个位置的反向双向迭代器。如果 multiset 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。 |
cbegin() | 和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值 |
cend() | 和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值。 |
crbegin() | 和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值 |
crend() | 和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值 |
find(val) | 在 multiset 容器中查找值为 val 的元素,如果成功找到,则返回指向该元素的双向迭代器;反之,则返回和 end() 方法一样的迭代器。另外,如果 multiset 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器 |
lower_bound(val) | 返回一个指向当前 multiset 容器中第一个小于或等于 val 的元素的双向迭代器。如果 multiset 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器 |
upper_bound(val) | 返回一个指向当前 multiset 容器中第一个大于 val 的元素的迭代器。如果 multiset 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器 |
equal_range(val) | 该方法返回一个 pair 对象(包含 2 个双向迭代器),其中 pair.first 和 lower_bound() 方法的返回值等价,pair.second 和 upper_bound() 方法的返回值等价。也就是说,该方法将返回一个范围,该范围中包含所有值为 val 的元素 |
empty() | 若容器为空,则返回 true;否则 false |
size() | 返回当前 multiset 容器中存有元素的个数 |
max_size() | 返回 multiset 容器所能容纳元素的最大个数,不同的操作系统,其返回值亦不相同 |
insert() | 向 multiset 容器中插入元素 |
erase() | 删除 multiset 容器中存储的指定元素 |
swap() | 交换 2 个 multiset 容器中存储的所有元素。这意味着,操作的 2 个 multiset 容器的类型必须相同 |
clear() | 清空 multiset 容器中所有的元素,即令 multiset 容器的 size() 为 0 |
emplace() | 在当前 multiset 容器中的指定位置直接构造新元素。其效果和 insert() 一样,但效率更高 |
emplace_hint() | 本质上和 emplace() 在 multiset 容器中构造新元素的方式是一样的,不同之处在于,使用者必须为该方法提供一个指示新元素生成位置的迭代器,并作为该方法的第一个参数 |
count(val) | 在当前 multiset 容器中,查找值为 val 的元素的个数,并返回 |
相对于set容器,count()、find()、lower_bound()、upper_bound()、equal_range()等方法更常用于multiset容器。
1、示例
以上是关于C++ STL multiset容器的主要内容,如果未能解决你的问题,请参考以下文章
STL——容器(Set & multiset)之 仿函数(函数对象)functor 的用法
STL——容器(Set & multiset)之 仿函数(函数对象)functor 的用法