2010-06-12 2 views
0

모든 요소는 명시 적으로 삭제 될 때까지 삽입 후 배열의 고정 된 위치에 있어야합니다. 거기에 부스트 또는 이와 같은 것이 있습니까? 감사합니다동적 벡터와 유사한 컨테이너이지만 요소가 인덱스를 저장합니까?

+3

"고정 위치"란 무엇을 의미합니까? 벡터의 처음이나 중간에서 요소를 삽입하거나 제거하지 않으면 해당 요소의 인덱스가 변경되지 않습니다. –

+0

손에 무슨 문제가 있습니까? – GManNickG

+0

@James McNellis : _any_ 요소를 삽입하거나 제거하면 다른 사람의 위치에 영향을주지 않아야합니다. 예를 들어 500 개의 요소가있는 컨테이너가 있고 처음 499 개를 모두 제거한 경우 마지막 요소는 500 번째 여야하며 컨테이너의 크기도 변경되지 않아야합니다. – szx

답변

3

unordered_map<int, T> 또는 map<int, T>을 사용하십시오.

또는는 vector<optional<T>>을 사용하고, 대신에 실제로 그것을 삭제하는 none_t에 삭제 슬롯을 설정합니다.

1

요소를 "삭제"하는 대신 해당 값을 null (또는 다른 "값이 없음")으로 설정하려고합니다. 그렇다면 필요한 모든 것이 일정하게 유지됩니다.

0

흥미 롭습니다. 목표는 정수에서 SLOTS 로의 매핑을 노출하는 것인데 SLOTS에 값이 포함될 수 있습니까? 아니면 각 요소의 기본 주소와 내부 배열 자체의 기본 주소를 보존하는 것이 목표입니까? 아마도 엘리먼트의 위치 나 정수 키에서 엘리먼트가 "제거 된"후에 보존 될 엘리먼트로의 매핑이 필요한 이유가있을 것이다. 그 이유는 무엇입니까? remove, erase, find 등의 작업이 제거 재 배열하거나 "제거"할 생각 정수를 검사하기 때문에 위에서 언급 한

map<> 또는 vector<> 구현이 작동하지 않을 수 있습니다.

불행히도 remove 정의 방법에 따라 vector<optional<T> > 또는 vector<T*> 주위에 래퍼를 사용하여 자신을 롤업해야 할 수도 있습니다.

관련 문제