아마도 이것은 중복이지만 검색하는 것을 찾지 못했습니다 . 발견 된 값을 가진 모든 요소 erase(value)
에 std::multiset
대해 호출 되면 삭제됩니다. 내가 생각할 수있는 유일한 해결책은 다음과 같습니다.
std::multiset<int>::iterator hit(mySet.find(5));
if (hit!= mySet.end()) mySet.erase(hit);
이것은 괜찮지 만 더 나을 것이라고 생각했습니다. 어떤 아이디어?
답변
auto itr = my_multiset.find(value);
if(itr!=my_multiset.end()){
my_multiset.erase(itr);
}
나는 똑같은 것을 달성하는 더 깨끗한 방법이 있다고 상상할 것입니다. 그러나 이것은 작업을 완료합니다.
답변
이걸로 해봐:
multiset<int> s;
s.erase(s.lower_bound(value));
당신 value
이 세트 에서 출구 를 확인할 수 있는 한. 작동합니다.
답변
if(my_multiset.find(key)!=my_multiset.end())
my_multiset.erase(my_multiset.equal_range(key).first);
이것은 C ++의 다중 집합에서 단일 인스턴스를 제거하는 가장 좋은 방법입니다.
답변
나는 다음을 시도 할 것입니다.
equal_range()
키와 동일한 요소의 범위를 찾기 위해 먼저 호출 합니다.
반환 된 범위가 비어 있지 않은 경우 erase()
요소 범위 (즉, erase()
두 개의 반복기를 사용하는 요소 )
-
첫 번째 인수는 반환 된 범위 (즉, 하나의 과거
.first
반환) 에서 두 번째 요소에 대한 반복자입니다. -
반환 범위 쌍 반복자로 두 번째 인수
.second
하나.
templatetypedef 의 (감사합니다!) 주석 을 읽은 후 편집하십시오 .
하나 (모두와 반대되는) 중복을 제거해야하는 경우 : equal_range()
에서 반환 된 쌍에 두 개 이상의 요소 erase()
가있는 경우 반환 된 쌍의 .first를의 단일 반복자 버전으로 전달하여 첫 번째 요소가됩니다 erase()
.
의사 코드 :
pair<iterator, iterator> pit = mymultiset.equal_range( key );
if( distance( pit.first, pit.second ) >= 2 ) {
mymultiset.erase( pit.first );
}
답변
이것은 나를 위해 일했습니다.
multi_set.erase(multi_set.find(val));
val이 다중 세트에 존재하는 경우.
답변
다음과 같이 할 수 있습니다.
multiset<int>::iterator it, it1;
it = myset.find(value);
it1 = it;
it1++;
myset.erase (it, it1);
답변
사실 정답은 다음과 같습니다.
my_multiset.erase(my_multiset.find(value));