[STL] set & multiset

Posted by-sknight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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);

以上是关于[STL] set & multiset的主要内容,如果未能解决你的问题,请参考以下文章

STL使用————SET&MULTISET

STL——容器(Set & multiset)的迭代器

STL——容器(Set & multiset)的迭代器

STL——容器(Set & multiset)的删除 erase

STL——容器(Set & multiset)的删除 erase

STL——容器(Set & multiset)之 仿函数(函数对象)functor 的用法