【问题标题】:Best way to check a range from a map从地图检查范围的最佳方法
【发布时间】:2015-02-10 01:09:25
【问题描述】:

我目前有一个std::map<int,int> 像这样的值

Key Value
60   2
84   3 
99   5

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

int a = SomeMethod();

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

【问题讨论】:

  • 你的地图总是有 3 个数字吗?
  • 顺便说一句,“no”不是缩写“number”的好方法
  • @JerryCoffin 是的。感谢您指出错误。
  • 我的地图可能有 5 个数字
  • @MistyD,你最好使用vectorbinary search。只是说'

标签: c++ dictionary c++03


【解决方案1】:

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

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

【讨论】:

  • 所以如果我有 84 会返回 3 还是 5?
  • 糟糕,upper_bound 返回严格大于的条目,而 lower_bound 是“不小于”的条目。固定!
  • @Pradhan,您的示例代码仍然显示upper_bound
  • @InnocentBystander 谢谢 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多