2016-12-01 3 views
3

setとmapは両方とも順序付けされたコンテナなので、std :: setのようにstd :: mapの最小値と最大値を0(1)時間で見つけることができますか?std :: setのようにstd :: mapでmin/maxを見つけるには?

// for std::set 
// std::set<int> s; 
auto min = *s.begin(); 

auto max = *s.rbegin(); 

std :: mapからO(1)のmaxとminを取得するにはどうすればよいですか?他の質問は、マップを反復することを示唆しているようですが、std :: mapの順序付けられたプロパティを使用して結果をより速く取得することはできませんか?

+1

いいえ、私は思っていません。マップ上のソートはキーの種類によって異なります。 –

+0

0(1)時間で最小の鍵を見つけることができますか? – nnrales

+1

私は少し前に[類似の答え](http://stackoverflow.com/a/7648812)を持っていました。 –

答えて

6

このようなキーのためのイテレータからの最初の逆参照、:

// for std::map<int,string> s 
auto minKey = s.begin()->first; 
auto maxKey = s.rbegin()->first; 

マップは唯一の自分のキーにソートされているので、これは、キー、ない値に対してのみ機能します。

+0

きれいにありがとうございます。それを反復するよりも良い方法がなければならないと私には思われました。私はこれが答えかもしれませんが、確認したいと思いました。 – nnrales

+0

ええ、私はちょうど最小の鍵を探したかったのです。 – nnrales

+0

この回答は非常に賢いですが、私は "このようなキーのイテレータから最初に参照解除"という言い回しが見つかりました。最初の/最後の要素のキーがそれぞれ最小/最大になるようにマップが常に格納されているという追加の文を追加する価値があります。 +1にかかわらず。 – Vality

関連する問題