C++ STL set详解

set底层是红黑树。

关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。

为何map和set的插入删除效率比用其他序列容器高?

一句话:因为对于关联容器来说,不需要做内存拷贝和内存移动。
set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点。因此插入的时候只需要稍做变换,把节点的指针指向新的节点就可以了。删除的时候类似,稍做变换后把指向删除节点的指针指向其他节点也OK了。这里的一切操作就是指针换来换去,和内存移动没有关系。

set中常用的方法

#include<bits/stdc++.h>

using namespace std;

int main(void)
{
	set<int> si;
	set<int>::iterator it;//迭代器
	int i = 10;
	while (i--)si.insert(i);//从10-1插入
	si.insert(1);//此处没有插入 因为已经有1了
	it = si.begin();//让迭代器指向头部
	while (++it != si.end())cout << *it;//从1-10输出 set内部会自动排序
	cout << endl;
	cout << "11出现的次数:" << si.count(11) << endl;//11出现的次数 0
	cout << "1出现的次数:" << si.count(1) << endl;//1出现的次数 1 
	si.erase(5);
	it = si.begin();//让迭代器指向头部
	while (++it != si.end())cout << *it;//遍历set
	cout << endl;
	if (si.find(3) != si.end())	cout << "找到3了";//find()寻找某数,如果找不到返回end()
	else cout << "没找到3";
}
发布了175 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43461641/article/details/103011894
今日推荐