查看地图范围的最佳方式

Best way to check a range from a map

本文关键字:最佳 方式 范围 地图      更新时间:2023-10-16

我当前有一个std::map<int,int>具有类似的值

Key Value
60   2
84   3 
99   5

现在我总是从方法中得到一个int

int a = SomeMethod();

我想做的是检查这个数字是否在钥匙的范围内所以如果数字是45,它小于键值60,所以我应该返回2。另一个例子是,如果这个数字比键值60多75,并且小于键值84,那么我应该返回3。我现在想的方法是一旦我有了一个数字。我会在地图上迭代,直到找到一个比我想要的大的数字。如果是,我会把它从地图上删除。然后继续这样做,直到我得到一个符合我条件的数字。我想知道是否有更好的方法来解决这个问题?

使用std::map::lower_bound。它向第一个条目返回一个迭代器,其关键字不小于给定的参数。

int a = SomeMethod();
auto it = myMap.lower_bound(a);
int val = someNotFoundSentinelValue;
if(it != myMap.end()
  val = it->second;