在 C++ 中的 std::map 中查找范围边界 `[x,y]` 中存在的最近的键

问题描述 投票:0回答:1

我需要在给定范围内找到地图中最近的键

[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
结果?

c++ stdmap
1个回答
0
投票

如果我正确理解了这个问题,你有一个地图

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

演示

© www.soinside.com 2019 - 2024. All rights reserved.