How to convert a multimap<int,int> to vector<pair<int,int> > efficiently
벡터 <pair <int,int>>을 multimap <int,int>으로 효율적으로 변환하는 방법은 무엇입니까?
편집 : 실제로
How to convert a multimap<int,int> to vector<pair<int,int> > efficiently
벡터 <pair <int,int>>을 multimap <int,int>으로 효율적으로 변환하는 방법은 무엇입니까?
편집 : 실제로
multimap<int,int>
의 값 유형은 pair<int,int>
입니다. 정확하게 벡터를 유지하고 싶습니다.
v.resize(mmap.size());
std::copy(mmap.begin(), mmap.end(), v.begin());
당신은 또한 사용할 수 있습니다 : 기존 벡터가있을 경우이 요소를 복사 할 경우,
std::vector< std::pair<int,int> > v(mmap.begin(), mmap.end());
을 또는 : 그래서, 당신은과 multimap에서 벡터를 초기화하는 생성자를 사용할 수 있습니다 std::back_inserter
,하지만 그 때문에 벡터 재 할당에 일반적으로 느린 것 :
std::copy(mmap.begin(), mmap.end(), std::back_inserter(v));
편집,536,다른 질문에 답하기 위해 비슷한 방법으로 벡터를 멀티 맵으로 변환 할 수 있습니다.
std::multimap<int,int> mmap(v.begin(), v.end());
이, 물론, v
이 std::vector< std::pair<int,int> >
있다고 가정 다음과 multimap은 반복자 범위를 받아들이는 생성자가 있습니다.
를 매핑하는 벡터를 변환 찾고 있던 문제에 대한 죄송합니다 나는 순진 접근 방식은 또한 가장 효율적인 하나라고 생각 다음과 multimap 반복하되,과에 각 요소를 추가 벡터. 최적화하기 전에 시작하기 전에 v.reserve(m.size)
해야합니다.
요소는 일반적으로 멀티 맵의 트리에 힙을 통해 분산되어 저장됩니다. 벡터의 경우 연속 된 메모리에 있어야합니다. 이렇게하려면 실제로 복사해야합니다.
C++의 연관 컨테이너 값 유형에는 상수 키가 있습니다. 즉, std :: multimap :: value_type은 std :: pair 입니다. 그 이유는 Key가 일정하지 않다면 컨테이너 상수를 깨는 non-const 반복자를 통해 변경할 수 있기 때문입니다 (요소는 키 업데이트 이후 잘못된 위치에있게됩니다) –