std::multiset - cppreference.com
来自cppreference.com
| 在标头 |
||
template< class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key> > class multiset; |
(1) | |
namespace pmr { template< class Key, class Compare = std::less<Key> > using multiset = std::multiset<Key, Compare, std::pmr::polymorphic_allocator<Key>>; } |
(2) | (C++17 起) |
std::multiset 是含有 Key 类型对象有序集的容器。与 set 不同,它允许多个 Key 拥有等价的值。用键比较函数 Compare 进行排序。搜索、插入和移除操作拥有对数复杂度。
标准库使用比较概念时,均用等价关系确定唯一性。不精确地说,如果两个对象 a 与 b 相互比较不小于对方:!comp(a, b) && !comp(b, a),那么认为它们等价。
|
比较等价的元素间的顺序是插入顺序,而且不会更改。 |
(C++11 起) |
std::multiset 满足容器 (Container) 、知分配器容器 (AllocatorAwareContainer) 、关联容器 (AssociativeContainer) 和可逆容器 (ReversibleContainer) 的要求。
|
然而,定义一个 |
(C++26 起) |
模板形参
成员类型
成员函数
构造 multiset (公开成员函数) [编辑] | |
析构 multiset (公开成员函数) [编辑] | |
| 将值赋给容器 (公开成员函数) [编辑] | |
| 返回关联的分配器 (公开成员函数) [编辑] | |
迭代器 | |
(C++11) |
返回指向起始的迭代器 (公开成员函数) [编辑] |
(C++11) |
返回指向末尾的迭代器 (公开成员函数) [编辑] |
(C++11) |
返回指向起始的逆向迭代器 (公开成员函数) [编辑] |
(C++11) |
返回指向末尾的逆向迭代器 (公开成员函数) [编辑] |
容量 | |
| 检查容器是否为空 (公开成员函数) [编辑] | |
| 返回元素数 (公开成员函数) [编辑] | |
| 返回可容纳的最大元素数 (公开成员函数) [编辑] | |
修改器 | |
| 清除内容 (公开成员函数) [编辑] | |
| 插入元素或节点(C++17 起) (公开成员函数) [编辑] | |
(C++23) |
插入元素范围 (公开成员函数) [编辑] |
(C++11) |
原位构造元素 (公开成员函数) [编辑] |
(C++11) |
使用提示原位构造元素 (公开成员函数) [编辑] |
| 擦除元素 (公开成员函数) [编辑] | |
| 交换内容 (公开成员函数) [编辑] | |
(C++17) |
提取容器中的节点 (公开成员函数) [编辑] |
(C++17) |
从另一容器合并节点 (公开成员函数) [编辑] |
查找 | |
| 返回匹配特定键的元素数量 (公开成员函数) [编辑] | |
| 寻找带有特定键的元素 (公开成员函数) [编辑] | |
(C++20) |
检查容器是否含有带特定键的元素 (公开成员函数) [编辑] |
| 返回匹配特定键的元素范围 (公开成员函数) [编辑] | |
| 返回指向首个不小于 给定键的元素的迭代器 (公开成员函数) [编辑] | |
| 返回指向首个大于 给定键的元素的迭代器 (公开成员函数) [编辑] | |
观察器 | |
| 返回用于比较键的函数 (公开成员函数) [编辑] | |
返回用于比较 value_type 类型的对象中的键的函数 (公开成员函数) [编辑] | |
非成员函数
注解
成员类型 iterator 与 const_iterator 可能是同一类型的别名。这表明以这两个类型为形参类型的一对函数重载可能违背单一定义规则。因为 iterator 可转换到 const_iterator,所以可以改成只提供一个以 const_iterator 为形参类型的函数。
| 功能特性测试宏 | 值 | 标准 | 功能特性 |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | 容器的范围构造和插入 |
__cpp_lib_constexpr_set |
202502L |
(C++26) | constexpr std::multiset
|
示例
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 103 | C++98 | 允许通过迭代器修改键 | 使迭代器为常迭代器 |
| LWG 230 | C++98 | Key 不需要满足可复制构造 (CopyConstructible) (因此不保证能构造 Key 类型的键)
|
Key 也需要满足可复制构造 (CopyConstructible) |