STL set
前言
set应为是基于红黑树的平衡二叉树的数据结构实现,其中所包含的元素的值是唯一的,所以主要用于去重和排序。
使用
set
遍历速度 | 插入删除速度 | 随机访问速度 | 备注 | |
---|---|---|---|---|
Set | 快 | 快 | 慢 | 比list多占一个指针的存储空间 |
函数 | 描述 |
---|---|
insert(元素) | 插入一个元素。 |
erase(元素) | 删除一个元素。 |
find(元素) | 查找一个元素。 |
size() | 返回容器中元素的数量。 |
empty() | 检查容器是否为空。 |
begin() | 返回首位元素位置。 |
end() | 返回尾元素。 |
#include <bits/stdc++.h>
using namespace std;
int main()
{
set<int> se;
se.insert(10);
se.insert(12);
se.insert(10);
se.insert(19);
se.insert(13);
se.insert(10);
se.insert(5);
se.insert(1000);
se.insert(14);
se.insert(11);
se.insert(10);
for (auto it = se.begin(); it != se.end(); ++it)
{
cout << *it << " ";
}
return 0;
}
/*输出: 5 10 11 12 13 14 19 1000 */
可以看到set 按升序排序
#include <bits/stdc++.h>
using namespace std;
bool MyCompareFunc(int v1, int v2)
{
return v1 > v2; // 降序排序
}
int main()
{
set<int, bool (*)(int, int)> se(MyCompareFunc); // 使用函数指针指定排序规则
se.insert(10);
se.insert(12);
se.insert(10);
se.insert(19);
se.insert(13);
se.insert(10);
se.insert(5);
se.insert(1000);
se.insert(14);
se.insert(11);
se.insert(10);
for (auto it = se.begin(); it != se.end(); ++it)
{
cout << *it << " ";
}
return 0;
}
/*输出: 1000 19 14 13 12 11 10 5 */