[英]std::map::upper_bound vs std::upper_bound performance
[英]Avoid crash from std::upper_bound
每当我这样做时:
auto itr = ranges::upper_bound(vector, value);
如果该value
大于vector
中的任何值,那么它将给我一个错误/崩溃( debug assertion failed)
。 我想以某种方式避免这种情况。 我可能想到的唯一解决方案是:
ranges::sort(vector); // or any code which can find the maximum element in a container
if (*(vector.end()-1) > value)
auto itr = ranges::upper_bound(vector, value);
但是找到最大值意味着更多的工作,我可以用更有效的方式来做吗? 编辑:崩溃时我使用的全部代码在这里:
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
auto main() -> int
{
int n, value;
cin >> n;
vector <int> vector;
for (int i = 0; i < n; i++)
{
int a;
cin >> a;
vector.push_back(a);
}
cin >> value;
ranges::sort(vector);
auto itr = ranges::upper_bound(vector, value);
cout << *itr;
return 0;
}
来自cppreference :
返回指向范围 [first, last) 中大于 value 的第一个元素的迭代器,如果没有找到这样的元素,则返回 last。
这意味着它可能会返回结束迭代器。 在这种情况下,您不能取消引用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.