算法与数据结构之集合
2023-06-13 09:14:14 时间
C++为我们提供了集合这个内置的数据结构,它是基于二叉搜索树来实现的,并且对树进行了平衡处理,使得元素在树中分布较为均匀。因此,能保证它搜索、插入、删除操作的时间复杂度为O(logn)
set是stl的内置数据结构,它包含以下的成员函数:
函数名 | 功能 | 复杂度 |
---|---|---|
size() | 返回set中的元素数 | O(1) |
clear() | 清空set | O(1) |
begin() | 返回指向set开头的迭代器 | O(1) |
end() | 返回指向set末尾的迭代器 | O(1) |
insert(key) | 向set中插入元素key | O(logn) |
find(key) | 搜索与key一致的元素,并返回指向该元素的迭代器。若没有与key一致的元素,则返回指向set末尾的迭代器 | O(logn) |
erase(key) | 删除值为key的元素 | O(logn) |
需要注意的是,指向set末尾的迭代器,指向的是最后一个元素的下一位的内存地址。(如果不是这样的话,那在搜索的时候,如果key与集合最后一个元素相同的话,就会得出无法找到元素的结论了)
下面一个例子给出了set的集中用法:
#include<iostream>
#include<set>
using namespace std;
void print(set<int>s)
{
cout<<s.size()<<":";
for(set<int>::iterator it = s.begin(); it!=s.end();it++)
{
cout<<" "<<(*it);
}
cout<<endl;
}
int main()
{
set<int>s;
s.insert(8);
s.insert(1);
s.insert(7);
s.insert(4);
s.insert(8);
s.insert(4);
print(s);
s.erase(7);
print(s);
s.insert(2);
print(s);
if(s.find(4)==s.end()) cout<<"not found"<<endl;
}
相关文章
- 递归算法–斐波那契数列「建议收藏」
- Vue中的diff算法深度解析
- K-近邻算法(KNN)
- 路径匹配之最长公共子序列LCSS算法简析
- 前端工程师leetcode算法面试必备-简单的二叉树
- 安全帽识别算法技术原理
- BAT面试算法进阶(8)- 删除排序数组中的重复项
- BAT面试算法进阶(2)- 无重复字符的最长子串(暴力法)
- 【Android 内存优化】内存抖动 ( 垃圾回收算法总结 | 分代收集算法补充 | 内存抖动排查 | 内存抖动操作 | 集合选择 )
- 算法-字符串的排列详解编程语言
- 滑动窗口算法在Redis中的应用(滑动窗口算法 redis)
- Oracle生成1到6随机数的算法探索(oracle1到6随机数)
- 海量数据库的查询优化及分页算法方案集合1/2