2017-07-15 11 views
1

値とインデックスをC++でstl multisetに格納しています。今私は、与えられた値の下限値の最も高いインデックスを見つけたいと思っています。たとえば、セットが{(2,1)、(3,4)、(4,2)、(5,5)、(5,6)、(6,3)}で構成され、答えは6です。下限は5で、最高のインデックスは6です。これを返すにはlower_bound関数をどのように変更しますか?マルチセットでの下限の検索<pair <int,int>>(C++)

マルチセットに(5,0)を挿入しようとしましたが、検索機能を使用して以前のものを回答しましたが、機能しませんでした。前もって感謝します。

+1

「指定された値の下限値」とは、どういう意味ですか?値が含まれている値に匹敵する場合にのみ、コレクションの値の下限を与えることができます。 'int 'は' pair 'と比較できません。 – HeroicKatora

+1

与えられた値の下限値で、指定された値よりも小さいマルチセットの最初の値の最大値を意味します。 –

+0

これは 'multimap 'ではないはずなので、キーを効率的に比較することができます。しかし、私はそれがあなたにインデックスを与えない方法を見ます。 – HeroicKatora

答えて

0

下限(5,0)を取って代わりに(6、-inf)の下限をとり、返されたイテレーターをそのまま前の値にします。

int get_last_pos(x) 
    auto it = map.lower_bound(make_pair(x + 1, -INF)) 
    assert(it != map.begin()) 
    it--; 
    assert(it.first == x) 
    return it.second; 
+0

'int 'には' -INF'がありませんが、それをチェックしてください(それは合法的に含まれる可能性があるためassertではありません)? – HeroicKatora

+1

答えに感謝しました。 -INFについては、INT_MIN –

+0

@ k.b.shyamを使用しました。これは、 'x'の下限は第1の値' not small'であるため、第2のアサートをトリガするより大きい可能性があります。あるいは私はあなたの意図を誤解しましたか? – HeroicKatora

関連する問題