STL之set

目录

set集合

常用函数

修改set比较方法

1.less改为greater

2.自定义比较逻辑

multiset多重集合

常用函数

unordeded_set无序集合

代码示例


set集合

set是一种容器,用于存储一组唯一的元素,并按照一定的排序规则进行排序。set中的元素是按照升序排序的,默认情况下,它使用元素的比较运算符(<)来进行排序。

set的定义和结构如下:

template,
         class Allocator = allocator>
class set;

Key: 表示存储在set中的元素的类型
Compare:表示元素之间的比较函数对象的类型,默认为less,即按照元素的值进行比较

Allocator: 表示用于分配内存的分配器类型,默认为allocator。

set的内部实现使用了红黑树(一种自平衡的二又搜索树)来存储元素,并保持元素的有序性这使得在set中插入、删除和查找元素的时间复杂度都是对数时间,即O(lo n)。set中的元素是唯一的,即不允许重复的元素存在。当插入一个重复的元素时,set会自动忽略该元素。

常用函数

函数                                  描述                                平均时间复杂度       最坏时间复杂度

insert                      向集合中插入元素                                O(logn)       O(logn)

erase                      向集合中移除元素                               O(logn)        O(logn)

find                          查找集合中的元素                               O(logn)        O(logn)

lower_bound           返回第一个不小于给定值的迭代器      O(logn)        O(logn)

upper_bound          返回第一个大于给定值的迭代器          O(logn)        O(logn)

size                        返回集合中元素的数量                         O(1)               O(1)

empty                     检查集合是否为空                               O(1)               O(1)

clear                       清空集合                                             O(1)                O(1)

begin                       返回指向集合起始位置的迭代器        O(1)                O(1)

end                       返回指向集合末尾位置的迭代器          O(1)                O(1)

rbegin                   返回指向集合末尾位置的逆向迭代器    O(1)                O(1)

swap                  返回指向集合起始位置的逆向迭代器      O(1)                O(1)

修改set比较方法

1.less改为greater

#include
#include
using namespace std;
int main()
{
	set>mySet;//setmySet;
	mySet.insert(25);
	mySet.insert(17);
	mySet.insert(39);
	mySet.insert(42);
	for (const auto& elem : mySet)
	{
		cout << elem << ' ';
	}
	cout << endl;
	return 0;
}

2.自定义比较逻辑

#include
#include
using namespace std;
struct mycompare
{
	bool operator()(const int& a, const int& b)const
	{
		return a > b;
	}
};
int main()
{
	setmySet;//setmySet;
	mySet.insert(25);
	mySet.insert(17);
	mySet.insert(39);
	mySet.insert(42);
	for (const auto& elem : mySet)
	{
		cout << elem << ' ';
	}
	cout << endl;
	return 0;
}

multiset多重集合

multiset容器允许存储重复的元素

常用函数

函数                                  描述                                平均时间复杂度       最坏时间复杂度

insert                      向集合中插入元素                                O(logn)       O(logn)

erase                      向集合中移除元素                               O(logn)        O(logn)

find                          查找集合中的元素                               O(logn)        O(logn)

lower_bound           返回第一个不小于给定值的迭代器      O(logn)        O(logn)

upper_bound          返回第一个大于给定值的迭代器          O(logn)        O(logn)

size                        返回集合中元素的数量                         O(1)               O(1)

empty                     检查集合是否为空                               O(1)               O(1)

clear                       清空集合                                             O(1)                O(1)

begin                       返回指向集合起始位置的迭代器        O(1)                O(1)

end                       返回指向集合末尾位置的迭代器          O(1)                O(1)

rbegin                   返回指向集合末尾位置的逆向迭代器    O(1)                O(1)

rend                      返回指向多重集合起始位置的逆向迭代器O(1)             O(1)

unordeded_set无序集合

没有特定的顺序

函数                                  描述                                平均时间复杂度       最坏时间复杂度

insert                      向集合中插入元素                                O(1)               O(n)

erase                      向集合中移除元素                               O(1)                O(n)

find                          查找集合中的元素                               O(1)                O(n)

count                      返回元素在集合中出现次数                 O(1)               O(n)

size                        返回集合中元素的数量                         O(1)               O(1)

代码示例

#include
#include
using namespace std;
int main()
{
	setmySet;
	//插入元素
	mySet.insert(25);
	mySet.insert(17);
	mySet.insert(39);
	mySet.insert(42);
	for (const auto& elem : mySet)
	{
		cout << elem << ' ';
	}
	cout << endl;
	//查找元素
	int search = 25;
	auto it = mySet.find(search);
	if (it != mySet.end())
	{
		cout << search << "found in the set." << endl;
	}
	else
	{
		cout << search << "not found in the set." << endl;
	}
	//移除元素
	int removeValue = 42;
	mySet.erase(removeValue);
	//再次遍历集合
	cout << "Set elements after removal:";
	for (const auto& elem : mySet)
	{
		cout << elem << ' ';
	}
	cout << endl;
	//clear
	mySet.clear();
	if (mySet.empty())
	{
		cout << "Set is empty." << endl;
	}
	else
	{
		cout << "Set is not empty" << endl;
	}
	return 0;
}

answer:

17 25 39 42
25found in the set.
Set elements after removal:17 25 39
Set is empty.

你可能感兴趣的:(c++,java,前端)