現在のところ、私の解決策は、これを解決するためにマップを反復処理することです。
upper_bound
このループを高速化できるメソッドですが、より速くまたはより簡潔な方法はありますか?
終わり:
_m.rbegin();
_
マップ (およびセット)はソートされるため、最初の要素が最小で、最後の要素が最大です。デフォルトでは、マップは _std::less
_ を使用しますが、比較演算子を切り替えることができます。これにより、もちろん最大の要素の位置が変更されます。 (たとえば、 _std::greater
_ を使用すると、begin()
に配置されます。
rbegin
はイテレータを返すことに注意してください。実際のキーを取得するには、m.rbegin()->first
を使用します。あなたmightは、明確にするために関数にラップしますが、価値があるかどうかはわかりません。
_template <typename T>
inline const typename T::key_type& last_key(const T& pMap)
{
return pMap.rbegin()->first;
}
typedef std::map</* types */> map_type;
map_type myMap;
// populate
map_type::key_type k = last_key(myMap);
_
Std :: mapのエントリは並べ替えられるため、std :: map m(m.empty()
がfalseであると想定)の場合、最大のキーを簡単に取得できます:(--m.end())->first
Std :: mapは連想配列なので、最大または最小のキーを簡単に見つけることができます。デフォルトでは、比較関数はless(<)演算子なので、最大のキーはマップの最後の要素になります。同様に、誰かが異なる要件を持っている場合、誰でもマップを宣言しながら比較関数を変更できます。
std :: map <key、Value、compare <key、Value>>
デフォルトでは、compare = std :: less