目录
和std::map与std::unordered_map一样,std::set底层是红黑树,std::unordered_set底层是hash表。
1、std::set
头文件:<set>
类声明:
template<
class Key,
class Compare = std::less<Key>,
class Allocator = std::allocator<Key>
> class set;
namespace pmr {
template <class Key, class Compare = std::less<Key>>
using set = std::set<Key, Compare, std::pmr::polymorphic_allocator<Key>>;
}
set是根据特定顺序存储唯一元素的容器,key就是元素的值,而且类型为const,不可在容器中修改,只支持添加和删除。
成员函数
(构造函数) |
构造 set (公开成员函数) |
(析构函数) |
析构 set (公开成员函数) |
operator= |
赋值给容器 (公开成员函数) |
get_allocator |
返回相关的分配器 (公开成员函数) |
迭代器 |
|
begincbegin (C++11) |
返回指向起始的迭代器 (公开成员函数) |
endcend (C++11) |
返回指向末尾的迭代器 (公开成员函数) |
rbegincrbegin (C++11) |
返回指向起始的逆向迭代器 (公开成员函数) |
rendcrend (C++11) |
返回指向末尾的逆向迭代器 (公开成员函数) |
容量 |
|
empty |
检查容器是否为空 (公开成员函数) |
size |
返回容纳的元素数 (公开成员函数) |
max_size |
返回可容纳的最大元素数 (公开成员函数) |
修改器 |
|
clear |
清除内容 (公开成员函数) |
insert |
插入元素或结点 (C++17 起) (公开成员函数) |
emplace (C++11) |
原位构造元素 (公开成员函数) |
emplace_hint (C++11) |
使用提示原位构造元素 (公开成员函数) |
erase |
擦除元素 (公开成员函数) |
swap |
交换内容 (公开成员函数) |
extract (C++17) |
从另一容器释出结点 (公开成员函数) |
merge (C++17) |
从另一容器接合结点 (公开成员函数) |
查找 |
|
count |
返回匹配特定键的元素数量 (公开成员函数) |
find |
寻找带有特定键的元素 (公开成员函数) |
contains (C++20) |
检查容器是否含有带特定键的元素 (公开成员函数) |
equal_range |
返回匹配特定键的元素范围 (公开成员函数) |
lower_bound |
返回指向首个不小于给定键的元素的迭代器 (公开成员函数) |
upper_bound |
返回指向首个大于给定键的元素的迭代器 (公开成员函数) |
观察器 |
|
key_comp |
返回用于比较键的函数 (公开成员函数) |
value_comp |
返回用于在value_type类型的对象中比较键的函数。 (公开成员函数) |
2、std::unordered_set
头文件:<unordered_set>
类声明:
template<
class Key,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
class Allocator = std::allocator<Key>
> class unordered_set;
namespace pmr {
template <class Key,
class Hash = std::hash<Key>,
class Pred = std::equal_to<Key>>
using unordered_set = std::unordered_set<Key, Hash, Pred,
std::pmr::polymorphic_allocator<Key>>;
}
无序集合是不按特定顺序存储唯一元素的容器,并可以根据其值快速检索单个元素。
同set一样,key就是元素的值,而且类型为const,不可在容器中修改,只支持添加和删除。
在内部,unordered_set中的元素未按任何特定顺序排序,而是根据其哈希值组织到存储桶中,以允许直接通过其值快速访问各个元素(平均平均时间复杂度恒定)。
尽管unordered_set容器通过其键访问单个元素的速度要比set容器快,但是通常通过它们的元素子集进行范围迭代的效率较低。
成员函数
(构造函数) | 构造 unordered_set (公开成员函数) |
(析构函数) |
析构 unordered_set (公开成员函数) |
operator= |
赋值给容器 (公开成员函数) |
get_allocator |
返回相关的分配器 (公开成员函数) |
迭代器 |
|
begincbegin |
返回指向起始的迭代器 (公开成员函数) |
endcend |
返回指向末尾的迭代器 (公开成员函数) |
容量 |
|
empty |
检查容器是否为空 (公开成员函数) |
size |
返回容纳的元素数 (公开成员函数) |
max_size |
返回可容纳的最大元素数 (公开成员函数) |
修改器 |
|
clear |
清除内容 (公开成员函数) |
insert |
插入元素或结点 (C++17 起) (公开成员函数) |
emplace |
原位构造元素 (公开成员函数) |
emplace_hint |
使用提示原位构造元素 (公开成员函数) |
erase |
擦除元素 (公开成员函数) |
swap |
交换内容 (公开成员函数) |
extract (C++17) |
从另一容器释出结点 (公开成员函数) |
merge (C++17) |
从另一容器接合结点 (公开成员函数) |
查找 |
|
count |
返回匹配特定键的元素数量 (公开成员函数) |
find |
寻找带有特定键的元素 (公开成员函数) |
contains (C++20) |
检查容器是否含有带特定键的元素 (公开成员函数) |
equal_range |
返回匹配特定键的元素范围 (公开成员函数) |
桶接口 |
|
begin(size_type) cbegin(size_type) |
返回一个迭代器,指向指定的桶的开始 (公开成员函数) |
end(size_type) cend(size_type) |
返回一个迭代器,指向指定的桶的末尾 (公开成员函数) |
bucket_count |
返回桶数 (公开成员函数) |
max_bucket_count | 返回桶的最大数量 (公开成员函数) |
bucket_size |
返回在特定的桶中的元素数量 (公开成员函数) |
bucket |
返回带有特定键的桶 (公开成员函数) |
哈希策略 |
|
load_factor |
返回每个桶的平均元素数量 (公开成员函数) |
max_load_factor |
管理每个桶的平均元素数量的最大值 (公开成员函数) |
rehash |
为至少为指定数量的桶预留存储空间。 这会重新生成哈希表。 (公开成员函数) |
reserve |
为至少为指定数量的元素预留存储空间。 这会重新生成哈希表。 (公开成员函数) |
观察器 |
|
hash_function |
返回用于对关键哈希的函数 (公开成员函数) |
key_eq |
返回用于比较键的相等性的函数 (公开成员函数) |