C ++ map,找到第一个小于key的元素

时间:2017-09-23 01:24:58

标签: c++ dictionary tree

我目前正在寻找与C ++中的地图类似的数据结构。

我正在寻找一个可以返回第一个元素的函数,该元素立即小于一定数量。例如:

map<int,int> m;
m[1] ++;
m[2] ++;
m[4] ++;
m[5] ++;

find_first_element_less_than(3) ----> return 2; 
m.upper_bound(3) ---> return 4; 

我查看了lower_bound函数。但是,它说它返回的第一个元素不小于key。在这种情况下,lower_bound(3)返回4.这不是我想要的。

我想知道C ++中是否有任何数据结构能为我做到这一点?

更新

我可以auto it = m.lower_bound(3); if (it != m.begin()) it--; ??

2 个答案:

答案 0 :(得分:2)

如果没有指向地图的开头,你可以找到下限,然后将迭代器减1。

答案 1 :(得分:1)

我认为你可以通过颠倒地图的顺序(map<int,int, std::greater<int> > m;),然后使用upper_bound找到第一个项目&#34;更大的&#34; (但实际上是因为你颠倒了谓词)而不是所请求的项目。如果你需要按升序迭代,你必须使用反向迭代器,这可能会让维护者(包括你自己)感到有些困惑。关于这个可能的解决方案,请仔细考虑您的需求。