2011-05-24 33 views
1

multimap提供了方法lower_boundupper_bound。兩者都可能會返回一個迭代器到鍵值大於所需值的值,lower_bound可能產生完全所需的值。如何在std :: multimap中返回嚴格小於給定鍵的最大鍵?

現在我想要一個迭代器的值,其中的關鍵是嚴格的的要求。如果它是map而不是multimap,則這將如下所述相對簡單地實現: Returning the greatest key strictly less than the given key in a C++ Map。 但是在multimap中,遞減迭代器並不能保證使其指向嚴格更小的密鑰。所以我需要反覆減少,直到找到一個更小的密鑰。不是特別好。

有沒有更好的方法來做到這一點?

鍵一般都是浮點數。


我的歉意,事實證明你 可以實際上做一個單一的遞減。我只是把它放在我的程序中,這是真正的錯誤。

回答

1

lower_bound點的最小元素大於或等於參數(或end)。因此遞減一次給你所需的元素(如果存在的話)。

+0

我認爲是這樣,它肯定可以在'map'中使用,但似乎不在'multimap'中。除非錯誤確實存在於其他地方,否則讓我再檢查一次...... – leftaroundabout 2011-05-24 16:25:26

+0

你確定你沒有碰到浮點舍入問題,你認爲你應該有相同的浮點數(也就是說,具有相同值的多個鍵),但是你的鑰匙實際上有一點非常小的百分比? – Jason 2011-05-24 16:31:30

+0

確實似乎是另一個問題,但它肯定與multimap的lower_bound方法有關。我仍然不確定。 – leftaroundabout 2011-05-24 16:33:40

2

據我所知,低/ UPPER_BOUND將返回迭代器該值的第一個元素,所以你可以減少它

+0

'upper_bound'返回一個指向* next *值的第一個元素的迭代器,所以遞減會給出一個指向參數實例的迭代器(如果存在的話)。 – Max 2011-05-24 20:21:24

相關問題