我目前正在寻找与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--;
??
答案 0 :(得分:2)
如果没有指向地图的开头,你可以找到下限,然后将迭代器减1。
答案 1 :(得分:1)
我认为你可以通过颠倒地图的顺序(map<int,int, std::greater<int> > m;
),然后使用upper_bound
找到第一个项目&#34;更大的&#34; (但实际上是因为你颠倒了谓词)而不是所请求的项目。如果你需要按升序迭代,你必须使用反向迭代器,这可能会让维护者(包括你自己)感到有些困惑。关于这个可能的解决方案,请仔细考虑您的需求。