>  기사  >  백엔드 개발  >  특정 첫 번째 요소를 기반으로 벡터에서 쌍을 제거하기 위해 지우기 제거 관용구를 올바르게 사용하는 방법은 무엇입니까?

특정 첫 번째 요소를 기반으로 벡터에서 쌍을 제거하기 위해 지우기 제거 관용구를 올바르게 사용하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-13 03:29:02841검색

How to Correctly Use the Erase-Remove Idiom for Removing Pairs in a Vector Based on a Specific First Element?

쌍 컨테이너에 지우기-제거 관용어 사용

쌍의 벡터<:pair direction>이 있다고 가정합니다. > 여기서 첫 번째 요소는 값을 나타내고 두 번째 요소는 열거형 방향을 나타냅니다. 첫 번째 요소를 기반으로 특정 쌍을 제거하려면 지우기-제거 관용구가 적합한 접근 방식입니다.

그러나 질문에서 알 수 있듯이 첫 번째 값이 4인 쌍을 제거하면 예기치 않은 동작이 발생합니다. 이를 수정하려면 std::erase 함수에 올바른 범위를 제공해야 합니다.

개선된 코드는 다음과 같습니다.

stopPoints.erase(std::remove_if(stopPoints.begin(),
                                stopPoints.end(),
                                [](const stopPointPair stopPoint) -> bool 
                                       { return stopPoint.first == 4; }), 
                 stopPoints.end());

이것이 올바르게 작동하는 이유는 다음과 같습니다.

  • std::remove_if: 이 함수는 범위(벡터의 처음부터 끝까지)와 쌍의 첫 번째 요소가 4인지 확인하는 조건자 람다를 사용합니다. 일치하는 모든 쌍이 끝에 오도록 벡터의 요소를 재배열합니다.
  • 반환된 반복자: std::remove_if의 결과는 조건자와 일치하는 첫 번째 요소를 가리키는 반복자입니다. (즉, 제거할 첫 번째 요소).
  • std::erase: 지우기 함수는 std::remove_if가 반환한 반복자부터 벡터 끝까지의 범위를 삭제합니다. . 결과적으로 일치하는 모든 쌍이 제거됩니다.

std::erase 호출에서 올바른 범위를 지정하면 지정된 첫 번째 값을 가진 모든 쌍이 효과적으로 제거됩니다.

위 내용은 특정 첫 번째 요소를 기반으로 벡터에서 쌍을 제거하기 위해 지우기 제거 관용구를 올바르게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.