1

multimapメソッドlower_boundと を提供しますupper_bound。どちらも、必要な値よりも大きなキーを持つ値にイテレータを返すlower_bound可能性があり、正確に必要な値が得られる可能性があります。

ここで、キーが要求された値よりも厳密に小さい値へのイテレータが必要です。それがmapではなく である場合multimap、ここで説明されているように、これを達成するのは比較的簡単です: Returning the maximum keystrictly less than the given key in a C++ Map . しかし、multimapでは、反復子をデクリメントしても、厳密に小さいキーを指すようになるとは限りません。したがって、より小さなキーが見つかるまで、繰り返しデクリメントする必要があります。特にいいじゃない。

これを行うよりエレガントな方法はありますか?

通常、キーは浮動小数点になります。


申し訳ありませんが、実際には 1 回のデクリメントで実行できることがわかりました。プログラムで間違って配置しただけで、それが本当のエラーでした。

4

2 に答える 2

2

AFAIK、lower/upper_bound はイテレータをこの値の FIRST 要素に返すため、減らすことができます

于 2011-05-24T16:19:23.660 に答える
1

lower_bound引数 (または ) 以上の最小の要素を指しendます。したがって、一度デクリメントすると、目的の要素が得られます (存在する場合)。

于 2011-05-24T16:20:59.387 に答える