[STL] set & multiset

前言

第一次写这种关于某一个类的常用方法的总结, 参考了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 S; multiset S;
size() \(O(1)\) 返回set中的元素数 cout << S.size()
clear() \(O(n)\) 清空set S.clear()
begin() \(O(1)\) 返回指向set开头的迭代器 set::iterator it = S.begin();
end() \(O(1)\) 返回指向set末尾的迭代器 set::iterator end = S.end();
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::iterator it = S.lower_bound(6);
upper_bound(k) \(O(log_{n})\) 搜索第一个大于k键值的元素, 并返回指向该元素的迭代器, 如果没有则返回末尾end() set::iterator it = S.upper_bound(6);
上一篇:思维题——牛客多校第六场D


下一篇:UVA_11020 Efficient Solutions 【平衡二叉搜索树set用法】