前言
第一次写这种关于某一个类的常用方法的总结, 参考了Sam 大叔的文章STL之list容器详解, 之后根据cppreference.com网站的资料归纳而来
Set 与 multiset 容器
template<
class Key,
class Compare = std::less<Key>,
class Allocator = std::allocator<Key>
> class set;
template<
class Key,
class Compare = std::less<Key>,
class Allocator = std::allocator<Key>
> class multiset;
set 是C++标准模版库(STL)中的部分内容.
通过比较函数 Compare 进行排序, 通常使用红黑树实现(还没有学到, 暂时理解为二叉搜索树)
multiset 与 set 差不多, 不同之处在于它允许拥有多个相同键的值
使用这两个容器之前必须添加头文件#include <set>
, 它们都属于std命名域
常用函数描述及示例
函数 | 复杂度 | 描述 | 示例 |
---|---|---|---|
构造函数 | \(O(1)\) | 创建一个集合/复合集合容器 | set |
size() | \(O(1)\) | 返回set中的元素数 | cout << S.size() |
clear() | \(O(n)\) | 清空set | S.clear() |
begin() | \(O(1)\) | 返回指向set开头的迭代器 | set |
end() | \(O(1)\) | 返回指向set末尾的迭代器 | set |
insert(k) | \(O(log_{n})\) | 向set中插入元素k | S.insert(6); |
erase(k) | \(O(log_{n})\) | 删除键值为k的元素 | S.erase(6); |
find(k) | \(O(log_{n})\) | 搜索键值为k的元素, 并返回指向该元素的迭代器, 如果没有, 则返回末尾end() | if (S.find(6) != S.end()) cout << "find 6"; |
count(k) | \(O(log_{n})\) | 返回与k键值相同的元素的数量 | cout << S.count(6); |
lower_bound(k) | \(O(log_{n})\) | 搜索第一个不小于k键值的元素, 并返回指向该元素的迭代器, 如果没有则返回末尾end() | set |
upper_bound(k) | \(O(log_{n})\) | 搜索第一个大于k键值的元素, 并返回指向该元素的迭代器, 如果没有则返回末尾end() | set |