Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从容器类中查找范围小于或大于的值_C++_Stl - Fatal编程技术网

C++ 从容器类中查找范围小于或大于的值

C++ 从容器类中查找范围小于或大于的值,c++,stl,C++,Stl,目前,我有一个std::map表,我正在寻找一个匹配特定范围的键值 例如: 从映射中查找一个键值,其值应小于搜索键值的50 如果搜索的键值是20,那么我需要一个range from map的键值,即 -70.............20............+70 除了使用两个循环(第一个循环小于,第二个循环大于)或适当的方法存储表数据以进行此类操作之外,还有更好的方法来查找键值吗?如果事先知道中间值,可以使用map::lower\u bound和map::upper\u bound进行查找

目前,我有一个std::map表,我正在寻找一个匹配特定范围的键值

例如:

从映射中查找一个键值,其值应小于搜索键值的<50或大于搜索键值的>50

如果搜索的键值是20,那么我需要一个range from map的键值,即

-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我指的是搜索键的值。