2014-04-21 4 views
2

업데이트 : Visual Studio 2013을 사용하는 Windows에서이 "문제"가 나타납니다. Clang 3.3 및 최신 버전의 llvm 표준 라이브러리를 사용하는 Linux에서이 코드가 Linux에서는 표시되지 않습니다. 여전히, 나는 이것을 마이크로 소프트 버그로 쓸 준비가되지 않았다.unordered_set - 매우 작음 max_bucket_count

내가 일하고있는 unordered_set과 관련된 호기심 문제를 발견했습니다. 나는 1의 load_factor와 수백만의 최대 크기를 가지고 있지만, 다음은 maximum_bucket_count가 단지 8이라는 것을 보여줍니다. 다른 유형의 세트로 이것을 시도했습니다.

누구든지 설명 할 수 있습니까?

초기화 또는 구성 종속 번호가 아닌 시스템 또는 라이브러리 구현 제한으로 간주됩니다. I는 MAX_COUNT (즉, 백만)

std::unordered_set<int> testSet; 
std::cout << "max_size = " << testSet.max_size() << std::endl; 
std::cout << "max_bucket_count = " << testSet.max_bucket_count() << std::endl; 
std::cout << "max_load_factor = " << testSet.max_load_factor() << std::endl; 

답변

0

http://en.cppreference.com/w/cpp/container/unordered_set/bucket_size

bucket_size(bucket index) 해당 인덱스 버킷의 요소의 개수를 max_bucket_count가 동일한 곳 아래 코드의 예이다 보았다. 그것은 작은 것으로되어 있습니다.

bucket_count()은 버킷 개수입니다. 대략 size() 인 것으로되어 있습니다.

이 내 컴퓨터에 일어나는 것이다 (1000000 개 임의의 정수를 삽입 한 후) :

size = 999891 
bucket_count = 1056323 
maximum bucket_size = 9 
max_size = 1152921504606846975 
max_bucket_count = 1152921504606846975 
max_load_factor = 1 

20000000 후 임의의 정수 :

size = 19953913 
bucket_count = 36473443 
maximum bucket_size = 9 

이 버킷 수보다 실제로 더 있음을 알 수있다 크기는 같지만 여전히 양동이가 작습니다.

+1

원래 질문은 max_bucket_count에 관한 것입니다. 제목은 정확했지만 질문 본문에서 오타를 수정해야했습니다. 귀하의 출력 maxitbucket_count는 TRILLIONS보다 높고 내 시스템에서는 8입니다. cpprefernce.com에서 : max_bucket_count() : 시스템 또는 라이브러리 구현 제한으로 인해 컨테이너가 보유 할 수있는 최대 버킷 수를 반환합니다. – Arbalest

+1

사용중인 표준 라이브러리 구현은 무엇입니까? –

+0

좋은 질문 - 나는 질문을 업데이 트합니다. Visual Studio 2013을 사용하는 Windows에서이 "문제"가 발생합니다. Linux에서 Clang 3.3과 최신 버전의 llvm 표준 라이브러리를 사용하여 동일한 코드를 볼 수 없습니다. – Arbalest