C++ 从容器类中查找范围小于或大于的值
目前,我有一个std::map表,我正在寻找一个匹配特定范围的键值 例如: 从映射中查找一个键值,其值应小于搜索键值的<50或大于搜索键值的>50 如果搜索的键值是20,那么我需要一个range from map的键值,即C++ 从容器类中查找范围小于或大于的值,c++,stl,C++,Stl,目前,我有一个std::map表,我正在寻找一个匹配特定范围的键值 例如: 从映射中查找一个键值,其值应小于搜索键值的50 如果搜索的键值是20,那么我需要一个range from map的键值,即 -70.............20............+70 除了使用两个循环(第一个循环小于,第二个循环大于)或适当的方法存储表数据以进行此类操作之外,还有更好的方法来查找键值吗?如果事先知道中间值,可以使用map::lower\u bound和map::upper\u bound进行查找
-70.............20............+70
除了使用两个循环(第一个循环小于,第二个循环大于)或适当的方法存储表数据以进行此类操作之外,还有更好的方法来查找键值吗?如果事先知道中间值,可以使用map::lower\u bound和map::upper\u bound进行查找
map<int, MyClass>::const_iterator lower =
myMap.lower_bound(-30); // or -70 if you prefer
map<int, MyClass>::const_iterator upper = myMap.lower_bound(70);
在取消引用之前,需要检查这两个迭代器的myMap.end
此代码段依赖于您的顺序是通常的升序-自定义顺序可以反转此顺序,以便-ve数字出现在+ve之后。没有更好的方法可以做到这一点-通过将映射构造为二叉树,这将是有效的
有关和,请参见联机示例
请注意,DWORD是无符号的,因此在地图中使用负数可能会给您一个警告错误,和-70出乎意料地大于70。据我所知,op希望通过搜索特定范围和映射中的值来获得关键点::*\u bound适用于非关键点values@erjot-措辞模棱两可,但第一句提到与特定范围匹配的键值。第二句从映射中找到应为的键值;imho op应重新考虑更改其数据结构uses@erjot我指的是搜索键的值。