如何检查map::lower_bound失败?
How to check map::lower_bound failure?
我想从映射 a 中获取一个键值对,该键值小于或等于给定的 K。
我想结束(或撕裂或任何错误指示)So simple code and nearly same:
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, int> m;
m[56]= 666;
auto it = m.lower_bound(1);
if(it != m.end()) {
cout << it->first;
} else {
cout << "this was expected!=(";
}
return 0;
}
我对 lower_bound 和 upper_bound 得到了同样糟糕的结果。我做错了什么?
Returns an iterator pointing to the first element in the container whose key is not considered to go before k (i.e., either it is equivalent or goes after).
所以在你的例子中得到 56 是意料之中的,因为它 而不是 在 1 之前。
要实现您的目标,请使用 upper_bound
returns 保证 比给定 'k' 更高的键,如果找到则减少迭代器:
auto it = m.upper_bound(key);
if (it == m.begin()) {
// First and all other values are higher than key
it == m.end();
}
else {
// Found higher value, one previous is equal or less than key
it--;
}
根据cppreference.com:
lower_bound
returns 指向第一个元素的迭代器不少于 比 key
upper_bound
returns 指向第一个比键 大的元素的迭代器
因此,在这两种情况下,您应该为 it->second
获得 666
,因为您插入的一个元素(键 = 56)满足这些条件。
这是我编写条件语句的方式:
int main() {
map<int, int> m;
m[56] = 666;
int myKey = 1;
auto it = m.upper_bound(myKey);
if (it == m.begin()) {
cout << "Key less than or equal to " << myKey << " doesn't exist\n";
} else {
--it; // <- This is the key you are looking for
}
return 0;
}
在这种情况下,我们会检查是否有元素大于您的键。如果它是地图中最低的键,那么您要找的东西不在那里。否则,我们只是将前一个元素获取到 upper_bound
.
找到的元素
我想从映射 a 中获取一个键值对,该键值小于或等于给定的 K。 我想结束(或撕裂或任何错误指示)So simple code and nearly same:
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, int> m;
m[56]= 666;
auto it = m.lower_bound(1);
if(it != m.end()) {
cout << it->first;
} else {
cout << "this was expected!=(";
}
return 0;
}
我对 lower_bound 和 upper_bound 得到了同样糟糕的结果。我做错了什么?
Returns an iterator pointing to the first element in the container whose key is not considered to go before k (i.e., either it is equivalent or goes after).
所以在你的例子中得到 56 是意料之中的,因为它 而不是 在 1 之前。
要实现您的目标,请使用 upper_bound
returns 保证 比给定 'k' 更高的键,如果找到则减少迭代器:
auto it = m.upper_bound(key);
if (it == m.begin()) {
// First and all other values are higher than key
it == m.end();
}
else {
// Found higher value, one previous is equal or less than key
it--;
}
根据cppreference.com:
lower_bound
returns 指向第一个元素的迭代器不少于 比 keyupper_bound
returns 指向第一个比键 大的元素的迭代器
因此,在这两种情况下,您应该为 it->second
获得 666
,因为您插入的一个元素(键 = 56)满足这些条件。
这是我编写条件语句的方式:
int main() {
map<int, int> m;
m[56] = 666;
int myKey = 1;
auto it = m.upper_bound(myKey);
if (it == m.begin()) {
cout << "Key less than or equal to " << myKey << " doesn't exist\n";
} else {
--it; // <- This is the key you are looking for
}
return 0;
}
在这种情况下,我们会检查是否有元素大于您的键。如果它是地图中最低的键,那么您要找的东西不在那里。否则,我们只是将前一个元素获取到 upper_bound
.