Namespaces
Variants

std::multimap<Key,T,Compare,Allocator>:: erase

From cppreference.net

iterator erase ( iterator pos ) ;
(1) (constexpr since C++26)
iterator erase ( const_iterator pos ) ;
(2) (since C++11)
(constexpr since C++26)
(3)
iterator erase ( iterator first, iterator last ) ;
(until C++11)
iterator erase ( const_iterator first, const_iterator last ) ;
(since C++11)
(constexpr since C++26)
size_type erase ( const Key & key ) ;
(4) (constexpr since C++26)
template < class K >
size_type erase ( K && x ) ;
(5) (since C++23)
(constexpr since C++26)

지정된 요소들을 컨테이너에서 제거합니다. 남아있는 동등한 요소들의 순서는 유지됩니다.

1,2) pos 위치의 요소를 제거합니다.
3) [ first , last ) 범위에 있는 요소들을 제거합니다. 이 범위는 * this 내에서 유효한 범위여야 합니다.
4) 키가 key 와 동등한 모든 요소를 제거합니다.
5) x 와 비교하여 동등한 모든 키를 가진 요소들을 제거합니다.
이 오버로드는 Compare transparent 이고, iterator const_iterator 모두 K 에서 암시적으로 변환되지 않는 경우에만 오버로드 해결에 참여합니다. 이를 통해 Key 인스턴스를 생성하지 않고 이 함수를 호출할 수 있습니다.

삭제된 요소에 대한 참조와 반복자는 무효화됩니다. 다른 참조와 반복자는 영향을 받지 않습니다.

반복자 pos 는 역참조 가능해야 합니다. 따라서 end() 반복자(유효하지만 역참조 불가능한)는 pos 의 값으로 사용할 수 없습니다.

목차

매개변수

pos - 제거할 요소에 대한 반복자
first, last - 제거할 요소들의 범위 를 정의하는 한 쌍의 반복자
key - 제거할 요소들의 키 값
x - 제거할 요소들을 나타내는 키와 투명하게 비교될 수 있는 임의의 타입의 값

반환값

1-3) 제거된 마지막 요소 다음의 반복자.
4) 제거된 요소의 수.
5) 제거된 요소의 수.

예외

1-3) 아무것도 던지지 않습니다.
4,5) Compare 객체에 의해 발생하는 모든 예외.

복잡도

주어진 c 인스턴스는 multimap 의:

1,2) 분할 상환 상수 시간.
3) log ( c. size ( ) ) + std:: distance ( first, last )
4) log ( c. size ( ) ) + c. count ( key )
5) log ( c. size ( ) ) + c. count ( x )

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_associative_heterogeneous_erasure 202110L (C++23) 연관 컨테이너와 비순차 연관 컨테이너에서의 연관 컨테이너 비순차 연관 컨테이너 에서의 이종 삭제; ( 5 ) 오버로드

예제

#include <map>
#include <iostream>
int main()
{
    std::multimap<int, std::string> c =
    {
        {1, "one"}, {2, "two"}, {3, "three"},
        {4, "four"}, {5, "five"}, {6, "six"}
    };
    // c에서 모든 홀수를 제거합니다
    for (auto it = c.begin(); it != c.end();)
    {
        if (it->first % 2 != 0)
            it = c.erase(it);
        else
            ++it;
    }
    for (auto& p : c)
        std::cout << p.second << ' ';
    std::cout << '\n';
}

출력:

two four six

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 130 C++98 오버로드 ( 1 ) ( 3 ) 의 반환 타입이 void 였음
(시퀀스 컨테이너의 erase() 요구사항과 일관되지 않음)
iterator 로 수정됨
LWG 371 C++98 삭제되지 않은 동등한 요소들의 순서가
보존된다는 보장이 없었음
보존되도록 요구됨
LWG 2059 C++11 오버로드 ( 1 ) 를 오버로드 ( 2 ) 로 대체하면서 새로운 모호성이 발생함 오버로드 ( 1 ) 를 다시 추가함

참고 항목

내용을 지웁니다
(public member function)