부스트를 구성 할 때 최소 버킷 수를 지정하십시오 :: unordered_map

StackOverflow https://stackoverflow.com/questions/694572

  •  22-08-2019
  •  | 
  •  

문제

부스트 :: unordered_map을 사용하여 일부 값을 캐시하려고합니다. 생성자에 최소 버킷 수를 지정하려고합니다.

#include <boost/unordered_map.hpp>
typedef boost::unordered_map<float, float> Mycache;
Mycache cache((std::size_t)25165843,
              boost::hash<float>(),
              std::equal_to<float>(),
              std::allocator<std::pair<float const, float> >());

그러나 프로그램이 끝날 때 unordered_map에 대한 정보를 표시하면 다음과 같습니다.

G ++ :

unordered_map.size(): 15861612
unordered_map.load_factor: 10.0845
unordered_map.bucket_count: 1572869
unordered_map.max_size: 1572868
unordered_map.max_load_factor: 1
unordered_map.max_bucket_count: 1572869

VC ++ :

unordered_map.size(): 13916119
unordered_map.load_factor: 8.8476
unordered_map.bucket_count: 1572869
unordered_map.max_size: 1572868
unordered_map.max_load_factor: 1
unordered_map.max_bucket_count: 1572869

최소 버킷 수를 어떻게 지정합니까?

도움이 되었습니까?

해결책

boost::unordered_map::max_bucket_count() 버킷 수에 대한 구현 의존적 한계를 반환합니다. unordered_map. 생성자 매개 변수 로이 한계를 초과 한 것으로 보입니다. MSDN은 이것을 최대 버킷 "현재"허용 (그 의미가 무엇이든) 최대 버킷으로 정의하지만 C ++ 0X 사양은 맵이 가질 수있는 가장 많은 버킷으로 정의합니다.

나는 클래스를 사용한 적이 없으며 C ++ 0X 초안에서 아무것도 볼 수 없으며 생성자가 왜 당신이 말한 것을 수행하지 않는 객체를 조용히 생성하는지 설명합니다.

나는 또한 그 가치의 뒤에 동기가 무엇인지 모른다 1572869, 그 외에는 큰 프라임입니다.

다른 팁

다른 대답은 표준에 대해 정확하지만 작은 max_bucket_count 실제로 부스트 1.38의 버그이며 다른 버전을 사용하면 더 많은 버킷을 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top