2016-09-28 6 views
1

stl::map은 정렬 된 맵이므로 정렬 된 데이터 세트를 삽입하는 것이 더 빠릅니까? 특별히 대규모 데이터 세트를 고려한다면?stl :: map에 삽입 된 삽입이 더 빠릅니까?

+2

왜 사용해 보시지 않습니까? – NathanOliver

+2

특정 구현에 따라 다르다고 생각합니다. 'map '은 보통 red-black tree 나 AVL tree 같은 트리 구조를 사용합니다. 정렬 된 시퀀스를 삽입하면 매번 리 밸런싱이 발생하지만 삽입 성능에 영향을 미치는 유일한 문제입니다. 즉, 재조정을 유발하거나 덜 자주 트리거하지 않는 마법 순서가있을 수 있습니다. 정렬 된 시퀀스 일 필요는 없습니다. –

+2

@WhiZTiM : 성능의 두 번째 규칙 인 "단일 시스템에서만 측정 된 결과에 의존하지 마십시오." –

답변

3

물론 데이터 정렬.

#include <map> 
#include <vector> 

int main() { 
    std::vector<int> data { 0, 1, 2, 3, 4, 5 }; 
    std::map<int, int> result; 
    // From: http://en.cppreference.com/w/cpp/container/map/insert 
    // Amortized constant if the insertion happens in the position just before 
    // the hint, logarithmic in the size of the container otherwise. 
    for(auto i : data) 
     result.insert(result.end(), { i, i}); 
} 
1

예. Big O의 관점에서 N 요소를 하나씩 삽입하는 것은 O (N * logN)이며, 맵 (일반적으로 일종의 균형 이진 트리)은 O (N) 만 필요합니다.

GCC의 libstdC++ 구현을 참조로 사용할 수도 있습니다.
gcc/libstdc++-v3/include/bits/stl_map.h