문제

이 있기 때문입니다.resize()회원 기능은 C++std::지도 궁금,어떻게 하나를 얻을 수 있는 std::지도에서 가장 n 요소입니다.

분명한 솔루션을 만드는 루프에서 0~n 고 사용하는 n 반복으로 첫 번째 매개 변수에 대한 std::삭제().

면 모든 솔루션을 필요로하지 않는 루프(적어도 내 사용자 코드)에와 더"STL 방법으로 갈 수 있습니다."

도움이 되었습니까?

해결책

당신이 사용할 수있는 std::advance( iter, numberofsteps ) 그에 대한.

다른 팁

std :: list, std :: map, boost :: multi_index와 같은 거의 모든 컨테이너에 대한 범용 솔루션. 지도의 크기 만 확인해야합니다.

template<class It>
It myadvance(It it, size_t n) {
   std::advance(it, n);
   return it;
}

template<class Cont>
void resize_container(Cont & cont, size_t n) {
    cont.erase(myadvance(cont.begin(), std::min(n, cont.size())), 
                 cont.end());
}

올바른 방법이 사용하는 std::advance.하지만 여기에 재미(slow)방법으로 할 수 있도록'사용의 크기를 조정니다.더 일반적으로 이러한 종류의 트릭을 위해 사용될 수 있는 다른 것들에서 작업하 벡터지만 지도에서.

map<K,V> m; //your map
vector< pair<K,V> > v(m.begin(), m.end());
v.resize(n);
m = map<K,V>(v.begin(),v.end());

Std::지도는 없습니다.There are no"n"요소입니다.

BTW:반복기가 잘못된 경우에는 컨테이너가 변경되었습니다.

당신이 정말로 필요한 경우 더 작은 지도 있지만 반복하고 모든 요소를 추가하는 n-일으로 새로운 지도입니다.

왜 당신이 원하는 크기를 변경하려면 지도?

는 요소에서 지도가 저장되지 않습니다 어떤 순서로 첫 번째'n'는 아무 의미가 없습니다

편집:
흥미롭게도 std::지도는,주문 확실하지 않는 방법에 유용한 이 개념이다.
는 항목에서 같은 정렬 순서로 키?
무슨 뜻입니까?이 있는 경우 이름을 키 SSN 에 의해 그 뜻을 이름에 저장됩니다 SSN 숫자 주문합니까?

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