2014-09-04 1 views
6

answers의 숫자가 인데 약 std::unordered_set은 무엇입니까?clear()가 std :: unordered_set의 버킷 수에 영향을 줍니까?

내 진짜 질문 (밀접하게 관련)이 있습니다; 이전에 합리적인 크기로 알고있는 것을 예약하면 각 사용 전에이를 지워서 동일한 순서가 지정되지 않은 세트를 재사용하는 것이 효율적입니까?

+1

구현에 따라 다를 수 있습니다. 표준에서는'clear()'가 컨테이너의 모든 요소를 ​​지우도록 지정합니다. –

+1

[동일한 인수가'std :: vector :: reserve'에 적용된다고 생각합니다.] (http://stackoverflow.com/a/18467916) :'bucket_count'는 관찰 가능한 상태의 일부입니다; 그것은 삽입시 변경 될 수 있지만,'rehash' 또는'reserve' (또는 내가 볼 수있는 한'erase')에 대해서 명시 적으로 변경하는 것은 허용되지 않습니다. – dyp

+0

@dyp : 당신이 나를 잃어 버렸습니다 ... "'bucket_count' ...'rehash' 또는'reserve'에서 명시 적으로 변경할 수 없습니다 - 후자는 버킷 번호를 허용하기 위해 존재합니다 (따라서'bucket_count())는 수정 될 수있다 - 전자는 새로운 수의 버킷을 직접적으로 받아 들인다. (그러나 'size()/max_load_factor()'sanity check의 영향을 받는다.) 그리고 후자는 예상되는 많은 요소들과 현재의'max_load_factor'에서 파생된다. "노골적으로"또는 그것이 아니라 그들이하는 일입니다. –

답변

6

정식 답은 구현에 따라 다릅니다. unordered_set 내부 버킷 (일종의) 배열을 가지고 있으며, 대부분 구현 vector와 일치하므로 clear()가 호출 될 때이 배열은 삭제되지 않습니다

비공식 대답이다. 그러므로 clear()으로 전화하면 어떤 이점이 있습니다.

+0

조나단 포터 (Jonathan Potter)의 답변과 마찬가지로 감사합니다. 그것이 지정되지 않았다는 것을 아는 것이 좋다. 사용하기 전에'reserve'를 사용하면 이미 성능면에서 이득을 얻습니다. – Sheljohn

관련 문제