2010-11-12 31 views
2

目前,我有一个std::map <DWORD, DWORD>表,我正在寻找与特定范围匹配的关键值。找到小于或大于容器类别范围的值

例如:

搜索由地图,其值的密钥值应该是小于50 <或大于> 50从搜索到的密钥值。

如果搜索键值20,那么我会想从地图即范围内的键值

-70.............20............+70 

有(第一不到更好的方法来找到比使用两个环路以外的其他键值,第二个大于)或适当的方式来存储这些操作的表数据?

回答

5

您可以使用map::lower_boundmap::upper_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之后。没有更好的方法来做到这一点 - 通过构建map作为二叉树,这将是有效的。

参见在线样品lower_boundupper_bound

注意DWORD无符号,因此在地图负数的使用可能会给你一个警告错误,和-70是意外> 70

+0

据我了解OP他通过搜索值要钥匙特定范围和'map :: * _ bound'适用于不是值的键 – erjot 2010-11-12 12:07:11

+0

@erjot - 措词不明确,但第一句提到“与特定范围匹配的键值”。 – 2010-11-12 12:09:22

+0

和第二个'从地图中查找哪个值应该是';)imho op应重新考虑更改他使用的数据结构 – erjot 2010-11-12 12:11:15