2016-12-01 8 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)의 최대 값과 최소값을 어떻게 구합니까? 다른 질문은지도를 통해 반복 할 것을 제안하는 것처럼 보일 수 있지만, 결과를 더 빨리 얻기 위해 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