关于set访问最后一个数的疑惑
  • 板块灌水区
  • 楼主Vrandy
  • 当前回复13
  • 已保存回复13
  • 发布时间2022/4/13 22:56
  • 上次更新2023/10/28 03:47:50
查看原帖
关于set访问最后一个数的疑惑
635303
Vrandy楼主2022/4/13 22:56

在做 B2094 不与最大数相同的数字之和 时候,需要找到序列中的最大值,在访问最大值的时候我原本尝试使用num.end()--,想要得到最大值,编译器并没有报错,但是在运行的时候发生了错误。

最后我用了num.rbegin()反向遍历得到了最后一个数。与此同时我尝试了num.rend()来访问第一个数,也失败了。

有两个疑问:

1.是否是因为set底层结构是用二叉树实现的,而不是线性的,所以不能简单地用++或者——。

2.如果那样不能,那我们应该怎么访问最后一个元素呢(除了反向遍历)? 代码如下,如能帮助,不胜感激

#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <iomanip>

using namespace std;

int main()
{   
	int a = 0, b = 0, n = 0;
	long long sum = 0;
	cin >> n;
	multiset <int> num;
	for (int i = 0; i < n; i++)
	{
		cin >> a;
		num.insert(a);
	}
	for (multiset<int>::iterator it = num.begin(); it != num.end(); it++)
	{
		if (*it != *(num.rbegin()))
		{
			sum += *it;
		}
	}
	cout << sum;

}
2022/4/13 22:56
加载中...