2013-08-29 3 views
7

질문과 마찬가지로 버킷 반복기 (local_iterator)를 사용하여 std::unordered_set에서 요소를 제거 할 수 있습니까? 삭제()는 iterator의 전체 수락 않으며, 동일한 기능이 local_iterator 거기 때문에bucket iterators를 통해 std :: unordered_set에서 요소를 제거 할 수 있습니까?

  • : 나는 두 가지 솔루션을 볼 수 있습니까?
  • local_iterator에 해당하는 세계 iterator을 얻을 수 있습니까?

가능하지 않은 경우 이유에 대해 자세히 설명해주세요.

+3

같은 함수 호출에서'it'과'++ it'을 동시에 사용할 수 없습니다. –

+0

업데이트되었지만 여전히 같은 오류가 발생합니다. –

+2

['std :: remove_if'] (http://en.cppreference.com/w/cpp/algorithm/remove)에서 읽어야합니다. 실제로 요소를 제거하지는 않습니다. –

답변

5

확실한 대답은 아니오입니다.이 기능을 지원하는 인터페이스에 기능이 없기 때문입니다. 또한 을 local_iterator에서 얻을 수있는 방법이 없습니다. 이유는 분명합니다. 은 local_iterator에 훨씬 적은 정보가 포함되어 있습니다. ( 대부분의 구현에 대해 을 구현하는 데는 이 필요하고 표준을 사용하는 것은 매우 간단 할 것이라고 생각합니다. 반면에 나는 표준을 사용할 수는 없습니다.

+0

"명백한"인수는 둘 다 의심 스럽습니다. (1) local_iterator를 iterator로 바꾸는데 필요한 다른 버킷 번호는 무엇입니까? (2) 전체 컨테이너를 반복 할 때 iterator를 지우는 유스 케이스가있는 것처럼, 버킷을 반복 할 때 local_iterator를 지우는 많은 경우가 있습니다. local_iterator에 대한 지우기가 없으면 std :: unordered_set의 const_local_iterator와 local_iterator 사이에 어떤 차이가 있습니까? – chs