answers의 숫자가 인데 약 std::unordered_set
은 무엇입니까?clear()가 std :: unordered_set의 버킷 수에 영향을 줍니까?
내 진짜 질문 (밀접하게 관련)이 있습니다; 이전에 합리적인 크기로 알고있는 것을 예약하면 각 사용 전에이를 지워서 동일한 순서가 지정되지 않은 세트를 재사용하는 것이 효율적입니까?
answers의 숫자가 인데 약 std::unordered_set
은 무엇입니까?clear()가 std :: unordered_set의 버킷 수에 영향을 줍니까?
내 진짜 질문 (밀접하게 관련)이 있습니다; 이전에 합리적인 크기로 알고있는 것을 예약하면 각 사용 전에이를 지워서 동일한 순서가 지정되지 않은 세트를 재사용하는 것이 효율적입니까?
정식 답은 구현에 따라 다릅니다. unordered_set
내부 버킷 (일종의) 배열을 가지고 있으며, 대부분 구현 vector
와 일치하므로 clear()
가 호출 될 때이 배열은 삭제되지 않습니다
비공식 대답이다. 그러므로 clear()
으로 전화하면 어떤 이점이 있습니다.
조나단 포터 (Jonathan Potter)의 답변과 마찬가지로 감사합니다. 그것이 지정되지 않았다는 것을 아는 것이 좋다. 사용하기 전에'reserve'를 사용하면 이미 성능면에서 이득을 얻습니다. – Sheljohn
구현에 따라 다를 수 있습니다. 표준에서는'clear()'가 컨테이너의 모든 요소를 지우도록 지정합니다. –
[동일한 인수가'std :: vector :: reserve'에 적용된다고 생각합니다.] (http://stackoverflow.com/a/18467916) :'bucket_count'는 관찰 가능한 상태의 일부입니다; 그것은 삽입시 변경 될 수 있지만,'rehash' 또는'reserve' (또는 내가 볼 수있는 한'erase')에 대해서 명시 적으로 변경하는 것은 허용되지 않습니다. – dyp
@dyp : 당신이 나를 잃어 버렸습니다 ... "'bucket_count' ...'rehash' 또는'reserve'에서 명시 적으로 변경할 수 없습니다 - 후자는 버킷 번호를 허용하기 위해 존재합니다 (따라서'bucket_count())는 수정 될 수있다 - 전자는 새로운 수의 버킷을 직접적으로 받아 들인다. (그러나 'size()/max_load_factor()'sanity check의 영향을 받는다.) 그리고 후자는 예상되는 많은 요소들과 현재의'max_load_factor'에서 파생된다. "노골적으로"또는 그것이 아니라 그들이하는 일입니다. –