몇 가지 임의의 테스트를 수행했지만 결론에 도달하지 못했습니다.어떤 상황에서 std :: unordered_map이 매우 느리게 동작합니까?
지도와 unordered_map에 1000000 개의 정수를 삽입하면지도에 사용되는 시간은 3 배가됩니다.
1000000 개의 문자열을 삽입하면지도에서 사용한 시간이 2 배 크게됩니다.
어떤 상황에서 std :: unordered_map이 매우 느리게 동작합니까?
미리 감사드립니다.
UPD :: gcc 버전 4.8.4 (Ubuntu 4.8.4-2ubuntu1 ~ 14.04.3). 모든 테스트는 -O2없이 수행되었습니다.
코드 :
a.cpp : std::map<int, int> M;
b.cpp : 내 테스트 std::unordered_map<int, int> M;
g(i, 1, 1000000) {
M[i] = rand() % i;
}
결과 :
[email protected]:~/Documents$ g++ a.cpp -o a -g --std=c++11 && time ./a
real 0m0.659s
user 0m0.653s
sys 0m0.004s
[email protected]:~/Documents$ g++ b.cpp -o b -g --std=c++11 && time ./b
real 0m0.260s
user 0m0.251s
sys 0m0.008s
[email protected]:~/Documents$ g++ a.cpp -o a -g --std=c++11 -O2 && time ./a
real 0m0.290s
user 0m0.282s
sys 0m0.008s
[email protected]:~/Documents$ g++ b.cpp -o b -g --std=c++11 -O2 && time ./b
real 0m0.081s
user 0m0.081s
sys 0m0.000s
여기 내 질문의 경우는 표준 발생할 수 있습니다 것입니다 :: unordered_map이 느려집니다.
사용중인 컴파일러와 테스트를 작성하는 데 사용한 컴파일러 옵션을 게시하지 않았습니다. "디버그"또는 최적화되지 않은 빌드를 타이밍하는 경우 결과는 의미가 없습니다. – PaulMcKenzie
고맙습니다 @PaulMcKenzie. 세부 사항을 추가했습니다. – SCaffrey
"-O2없이 얻었습니다"라고 말하면 최적화되지 않은 빌드를 타이밍한다고 말하는 것입니까? – PaulMcKenzie