Set是一种无序且不重复的数据结构,它允许我们快速地查找、插入和删除元素。而set最后一个元素的操作也是非常常见的,接下来我们从多个角度来分析这个操作。
一、set最后一个元素的获取方式
set最后一个元素的获取方式有很多种,以下是比较常见的几种方式:
1.使用迭代器
迭代器是set中最常用的遍历方式,我们可以通过迭代器来获取set中的最后一个元素。具体实现方式如下:
```cpp
set
// 插入元素
set
it--;
int last = *it;
```
2.使用rbegin和rend函数
rbegin和rend函数分别返回set中最后一个元素的迭代器和第一个元素的前一个位置的迭代器。具体实现方式如下:
```cpp
set
// 插入元素
int last = *(--s.rend());
```
3.使用back函数
back函数是C++ STL中vector和deque的成员函数,但是set中没有这个函数。我们可以通过将set转换成vector或deque来使用back函数获取最后一个元素。具体实现方式如下:
```cpp
set
// 插入元素
vector
int last = v.back();
```
二、set最后一个元素的删除方式
set最后一个元素的删除方式也有多种,以下是比较常见的几种方式:
1.使用erase函数
erase函数是set中删除元素的常用函数,我们可以通过迭代器来删除set中的最后一个元素。具体实现方式如下:
```cpp
set
// 插入元素
set
it--;
s.erase(it);
```
2.使用pop_back函数
pop_back函数是C++ STL中vector和deque的成员函数,但是set中没有这个函数。我们可以通过将set转换成vector或deque来使用pop_back函数删除最后一个元素。具体实现方式如下:
```cpp
set
// 插入元素
vector
v.pop_back();
s = set
```
三、set最后一个元素的修改方式
set最后一个元素的修改方式也有多种,以下是比较常见的几种方式:
1.使用迭代器
我们可以通过迭代器来修改set中的最后一个元素。具体实现方式如下:
```cpp
set
// 插入元素
set
it--;
*s = 10;
```
2.使用back函数
back函数是C++ STL中vector和deque的成员函数,但是set中没有这个函数。我们可以通过将set转换成vector或deque来使用back函数修改最后一个元素。具体实现方式如下:
```cpp
set
// 插入元素
vector
v.back() = 10;
s = set
```
四、set最后一个元素的应用场景
set最后一个元素的应用场景也很多,以下是比较常见的几种场景:
1.求解最小生成树
在求解最小生成树的时候,我们需要不断地添加边,直到生成树的边数为n-1。由于set是无序的,我们可以使用set的最后一个元素来判断是否满足条件。具体实现方式如下:
```cpp
set
// 插入边
while (tree.size() < n - 1) {
auto last = *(--s.end());
// 判断是否满足条件
if (check(last)) {
tree.insert(last);
// 删除最后一条边
s.erase(--s.end());
} else {
s.erase(--s.end());
}
}
```
2.维护滑动窗口
在维护滑动窗口的时候,我们需要不断地添加和删除元素,而set的最后一个元素可以帮助我们判断是否满足条件。具体实现方式如下:
```cpp
set
// 插入元素
for (int i = 0; i < n; i++) {
s.insert(a[i]);
// 判断是否满足条件
while (s.size() > k) {
s.erase(s.find(*(--s.end())));
}
// 输出最后一个元素
cout << *(--s.end()) << endl;
}
```
五、