如何使用C STL中的set

如何声明一个set在C STL中,set是一个十分有用的容器。要声明一个set,可以使用以下语法:```set name;```其中value_type是set中所要存储的元素类型,例如int、s

如何声明一个set

在C STL中,set是一个十分有用的容器。要声明一个set,可以使用以下语法:

```

set name;

```

其中value_type是set中所要存储的元素类型,例如int、string或自定义的结构体名称。声明set时还要包含set头文件,即`include `。

set中的元素类型必须定义小于号

set的内部实现是一棵红黑树,因此set中的元素类型必须定义小于号。C 自带的元素类型(如int、string)已经帮我们定义好了小于号,它们在set中会按照从小到大的顺序排列。如果是自定义的结构体,则需要学会如何重载运算符。

set的众多内置函数

set提供了许多内置函数来操作和访问元素,以下是常用的几个函数:

1. insert(x)/erase(x):在set中插入/删除元素x,其中x的类型必须是声明该set时的类型。时间复杂度为O(logn),其中log以2为底,n为set中的元素个数。如果x不在该set中,则在erase(x)时什么都不会删除。

2. begin()/end():返回该set的首/尾迭代器。因为是迭代器,如果想转换成声明时的类型,要在前面加上“*”。例如,声明了set s;然后string k *(); 是不行的,因为你不能把一个迭代器赋值给“string”,要加上“*”解除引用:string k *(); 时间复杂度为O(1)。

3. empty()/size():判断set是否为空/返回set的大小(即元素个数)。所有STL容器都有这两个内置函数,时间复杂度为O(1)。

4. clear():清空一个set,时间复杂度为O(n)。

5. find(x):查找set中是否有元素x,如果有,则返回指向该元素的迭代器,否则返回end()。时间复杂度为O(logn)。

set常用于排序和去重

由于set的特性,它常常被用来进行排序和去重。以下代码能够实现这两个功能:

```cpp

set numbers;

// 插入元素

(5);

(2);

(8);

(2); // set会自动去重,只会记录一次

// 输出排序后的元素

for (auto it (); it ! numbers.end(); it) {

cout << *it << " ";

}

```

以上就是set的大部分使用方法与应用。尽管set的大部分内置函数时间复杂度较高,但如果运用得当,能够帮助我们减少很多麻烦。

标签: