优草派  >   Python

set最后一个元素

徐晨光            来源:优草派

Set是一种无序且不重复的数据结构,它允许我们快速地查找、插入和删除元素。而set最后一个元素的操作也是非常常见的,接下来我们从多个角度来分析这个操作。

一、set最后一个元素的获取方式

set最后一个元素

set最后一个元素的获取方式有很多种,以下是比较常见的几种方式:

1.使用迭代器

迭代器是set中最常用的遍历方式,我们可以通过迭代器来获取set中的最后一个元素。具体实现方式如下:

```cpp

set s;

// 插入元素

set::iterator it = s.end();

it--;

int last = *it;

```

2.使用rbegin和rend函数

rbegin和rend函数分别返回set中最后一个元素的迭代器和第一个元素的前一个位置的迭代器。具体实现方式如下:

```cpp

set s;

// 插入元素

int last = *(--s.rend());

```

3.使用back函数

back函数是C++ STL中vector和deque的成员函数,但是set中没有这个函数。我们可以通过将set转换成vector或deque来使用back函数获取最后一个元素。具体实现方式如下:

```cpp

set s;

// 插入元素

vector v(s.begin(), s.end());

int last = v.back();

```

二、set最后一个元素的删除方式

set最后一个元素的删除方式也有多种,以下是比较常见的几种方式:

1.使用erase函数

erase函数是set中删除元素的常用函数,我们可以通过迭代器来删除set中的最后一个元素。具体实现方式如下:

```cpp

set s;

// 插入元素

set::iterator it = s.end();

it--;

s.erase(it);

```

2.使用pop_back函数

pop_back函数是C++ STL中vector和deque的成员函数,但是set中没有这个函数。我们可以通过将set转换成vector或deque来使用pop_back函数删除最后一个元素。具体实现方式如下:

```cpp

set s;

// 插入元素

vector v(s.begin(), s.end());

v.pop_back();

s = set(v.begin(), v.end());

```

三、set最后一个元素的修改方式

set最后一个元素的修改方式也有多种,以下是比较常见的几种方式:

1.使用迭代器

我们可以通过迭代器来修改set中的最后一个元素。具体实现方式如下:

```cpp

set s;

// 插入元素

set::iterator it = s.end();

it--;

*s = 10;

```

2.使用back函数

back函数是C++ STL中vector和deque的成员函数,但是set中没有这个函数。我们可以通过将set转换成vector或deque来使用back函数修改最后一个元素。具体实现方式如下:

```cpp

set s;

// 插入元素

vector v(s.begin(), s.end());

v.back() = 10;

s = set(v.begin(), v.end());

```

四、set最后一个元素的应用场景

set最后一个元素的应用场景也很多,以下是比较常见的几种场景:

1.求解最小生成树

在求解最小生成树的时候,我们需要不断地添加边,直到生成树的边数为n-1。由于set是无序的,我们可以使用set的最后一个元素来判断是否满足条件。具体实现方式如下:

```cpp

set> s;

// 插入边

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 s;

// 插入元素

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;

}

```

五、

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行