2013-06-09 3 views
-2

unordered_set에서 마지막 요소를 가져와야하며, 다른 클래스가 아닌 unordered_set을 사용해야합니다. (대부분 내가 이미 완료된 많은 코드를 수정해야하기 때문에)하지만 가능한 유일한 방법은 반복적이며 요소를 저장 한 다음 반환하는 것입니다. 그러나 큰 세트에서는 너무 느릴 것입니다. 게다가 나는 이것을 시도하고 작동하지 않았다. unordered_set에서 마지막 요소 가져 오기

unordered_set <int>::iterator it = frames.end(); 
--it; 

나는 다음과 같은 오류가 발생했습니다 : "에 대한 일치하지 않습니다 '--it'에서 'operator--'"

대부분이 때문에 유용의 종류, 그것의 데이터를 저장

에 " 스택 "방식으로, 다음과 같이 :

unordered_set<int> s; 
s.insert(9); 
s.insert(4); 
s.insert(8); 
s.insert(0); 
s.insert(1); 

unordered_set<int>::iterator it = s.end(); 
for(it = s.begin(); it!= s.end(); ++it) 
    cout << *(it) << " "; 

가 인쇄 :"1 0 8 4 9 "

그래서"마지막 삽입 된 첫 번째 "요소"요소는 항상 9, 그것은이다 될 것 " 전에 말했듯이 "st 고맙습니다.

의견을 제안 하시겠습니까?

+11

*** 정렬되지 않은 *** 집합의 "마지막"요소가 무엇인지 정의하십시오. – Xeo

+1

'마지막'요소가 정확히 무엇을 의미합니까? 보장 된 순서 (따라서 이름)가 없습니다 ... –

+4

@templatetypedef : 나는'unordered_set'에만 forward iterators (http://ideone.com/HmSbD3)가 있다고 믿습니다. –

답변

2

unordered_set에서 삽입 순서는 세트가 반복 될 때 가져올 순서 (즉 "정렬되지 않은"이름)와 반드시 일치하지는 않습니다. 이 데이터 구조에서 양방향 반복기가 지원되지 않는 이유 중 일부는 (- 연산자를 사용하여) unordered_set에서 앞뒤로 이동할 수 있다는 것은 왜 당신이 당신이 그것에서 나올 요소들.

작성한 삽입 순서는 반복 할 때의 순서를 지정하지 않습니다. 처음에 "9"를 삽입한다고해서 s.end()가 "9"를 반환하지는 않습니다. 이는 해시 테이블 (http://en.wikipedia.org/wiki/Hash_table)과 마찬가지로 삽입하는 각 개체의 해시 값을 집합이 계산하는 방식에만 의존하는 순서에 따라 결정되기 때문입니다. 따라서이 특정 데이터 구조가 사용되는 것이 아니기 때문에이 집합을 안정 적으로 "스택"을 복제하는 데 사용할 수는 없습니다.

http://www.cplusplus.com/reference/stack/과 같이 주문을 보존하는 데 사용할 수있는 다른 C++ STL 데이터 구조가 있습니다.