set STL简介
STL(Standard Template Library)是一种基于模板库的程序设计方法。其中的set是STL提供的一种关联式容器,用于存储一组元素,同时能够在O(log n)的时间复杂度内进行插入、删除和查找操作。set容器中不允许出现重复元素,且默认以升序方式排序存储。
插入操作
在set中插入元素的方法是使用insert()函数。该函数会把待插入元素按照规定的顺序插入到set中。
代码实现如下:
#include<set>
set<int> mySet;
mySet.insert(1);
mySet.insert(3);
mySet.insert(2);
上述代码将1、3、2插入到set中,并按升序排序。插入操作的时间复杂度为O(log n)。
删除操作
删除单个元素
在set中删除单个元素的方法是使用erase()函数,该函数接受一个迭代器参数,表示要删除元素的位置。
代码实现如下:
set<int> mySet;
mySet.insert(1);
mySet.insert(3);
mySet.insert(2);
set<int> :: iterator it = mySet.find(3); //查找元素3的位置
if(it != mySet.end())
mySet.erase(it); //删除元素3
上述代码的时间复杂度也是O(log n)。
删除一段元素
在set中删除一段元素也很简单,只需指定要删除的元素区间即可,使用erase()函数。
代码实现如下:
set<int> mySet;
mySet.insert(1);
mySet.insert(2);
mySet.insert(3);
mySet.insert(4);
mySet.insert(5);
mySet.erase(mySet.find(2), mySet.find(5)); //删除元素2到元素5(不包括元素5)
上述代码将删除元素2、3、4,时间复杂度为O(log n)。
查找操作
在set中查找元素也很简单,只需使用find()函数即可。如果查询到该元素则返回该元素的迭代器,否则返回end()迭代器。
代码实现如下:
set<int> mySet;
mySet.insert(1);
mySet.insert(2);
mySet.insert(3);
mySet.insert(4);
mySet.insert(5);
set<int> :: iterator it = mySet.find(3); //查找元素3的位置
if(it != mySet.end())
cout << "元素3的位置是:" << *it << endl;
else
cout << "未找到元素3!" << endl;
上述代码查找到元素3,并输出结果“元素3的位置是:3”。find()函数的时间复杂度为O(log n)。
总结
set是STL提供的一种关联式容器,用于存储一组元素,同时能够在O(log n)的时间复杂度内进行插入、删除和查找操作。set容器中不允许出现重复元素,且默认以升序方式排序存储。插入、删除和查找操作都很方便,只需要调用相应的函数即可,时间复杂度都是O(log n)。