从地图检查范围的最佳方法

时间:2015-02-10 01:09:25

标签: c++ dictionary c++03

我目前有std::map<int,int> 用这样的值

Key Value
60   2
84   3 
99   5

现在我总是从方法中获取一个int

int a = SomeMethod();

我想要检查的是该数字是否在密钥的范围之间 因此,如果数字是45,它小于键值60,所以我应该回来2.另一个例子是,如果数字比关键值60多75并且小于键值84,那么我应该回到3。 我目前想到的方法是我有一个数字。我会遍历地图,直到遇到一个比我想要的更大的数字。如果它是我将它从地图中删除。然后继续这样做,直到我得到一个符合我的条件的数字。我想知道是否有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:5)

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

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