我需要在给定范围内找到地图中最近的键
[x,y]
。我正在尝试下面
std::map<int, char> m{ {-2,'B'}, {1, 'C'}, {2, 'A'}};
auto itCurrent = m.lower_bound(-3);
auto itNext = m.upper_bound(-3);
auto it1 = m.lower_bound(3);
auto it2 = m.upper_bound(3);
我希望通过在查询边界
-2
周围使用 2
和 lower_bound
来获得指向 uppper_bound
和 keys [-3,3]
的迭代器。 it1
和 it2
返回 end
,而 itCurrent
和 itNext
将迭代器返回到 key -2
。
如何获得
iterators to -2 and 2
结果?
如果我正确理解了这个问题,你有一个地图
m
和两个键x
和y
,并且你想要m
的第一个元素不小于x
和m
的最后一个元素不大于y
。
第一个正是
lower_bound
为您提供的。在你的例子中就是 itCurrent
。第二个,您可以轻松使用 lower_bound
和 std::advance
。
auto inverse_lower_bound(auto const& map, auto const& key) {
auto it = map.lower_bound(key);
if (it == map.end() && !map.empty()) {
std::advance(it, -1);
}
return it;
}