2011-11-11 2 views
2

ETS 세트는 튜플의 내부 순서가 삽입 된 순서와 동일 함을 보장합니까? 예를 들어, 매초마다 튜플을 삽입하여 로그를 유지하고 타임 스탬프가 키입니다. 이 예제에서는 터플이 키에 의해 정렬되도록 보장합니까?ETS는 보존 순서를 설정합니까?

나는 ordered_set이 원하는대로 할 수 있다고 생각하지만 삽입 오버 헤드가 있습니다. 따라서 set이 삽입 순서를 유지한다면, set을 사용하는 것이 나의 예제에서 훨씬 더 효율적일 것입니다. 그래? :-) 사전에

감사합니다, 니콜라

답변

4

아니요, 테이블 유형이 set 인 경우 키를 정렬하는 순서가 전혀 보장되지 않습니다. 이들은 해시 된 다음 해시 값을 사용하여 요소를 테이블에 넣습니다. 테이블이 때때로 크기가 조정되고 재정렬되므로 순서가 변경됩니다. 그래서, 당신은 단지 행운아였습니다.

+0

그래서 해시로 정렬됩니다. 고마워. – dijxtra

+0

@dijxtra : 예,'set'과'bag'은 해시 된 반면'ordered_set'은 정렬 된 바이너리 트리입니다. – rvirding

+0

궁금합니다 ... 주문한 색인을 키로 비교해야한다면 O (lg n) 최악의 경우보다 빨리 할 수 ​​있습니까? 물론 인서트를 상환하고 (예를 들어 페어링 힙과 같은) 추출물로 지불 할 수는 있지만 여전히 ... –

1

경우에도 ETS set않습니다 당신의 가정 오늘, 그것은 앞으로 계속 그렇게 할 것이라는 보장은 없습니다 충족 -이 특히를 필요한 정확한 속성을 가진 ordered_set