컨테이너간에 unique_ptrs를 이동하는 중 문제가 발생했습니다. unique_ptrs 묶음을 포함하는 요소라고하는 std :: unordered_set이 있습니다. 하위 요소라고하는 다른 unordered_set으로 그 중 일부를 옮기고 싶습니다. 어떻게해야합니까?컨테이너 간 std :: unique_ptr 이동
오류 : 나는 위의 코드를 사용하여 다음과 같은 컴파일러 오류가
void MeshContainer::MoveSubelements(){
int mesh_dim = MeshDimension();
for(auto el=elements.begin(); el!= elements.end(); ++el){
if((*el)->getDim() != mesh_dim){
subelements.insert(std::move(*el));
elements.erase(*el);
}
}
}
: 여기
내 함수의 < _Tp, _Dp> :: unique_ptr (unique_ptr 삭제 기능 '표준 : 사용 const std :: unique_ptr < _Tp, _Dp> &) [_Tp = MEl; _Dp = std :: default_delete] '문제는 복사 생성자와 관련이 있다고 생각하지만 std :: move를 사용하면 문제가 해결 될 것이라고 생각했습니다.
아이디어가 있으십니까?
감사합니다.
'unique_ptr'에는 어떤 유형이 들어 있습니까? – yizzlez
오류를 신고하는 라인은 무엇입니까? – aschepler
아쉽게도 작동하지 않습니다. 'std :: set'의 요소는 불변입니다 (= 클래스 반복자 중 하나는 집합이 정렬되어 있기 때문에 반복자는 상수 반복자입니다). 트리 기반 컨테이너 IIRC에 이러한 트리를 지원하기 위해 트리의 스플 라이스 (splicing)를 추가하는 제안이 있습니다. 편집 : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3586.pdf – dyp