乐趣区

关于c++: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、示例

退出移动版