find_if 예제

다음 예제에서는 std:::algorithm::find_if() 함수의 사용을 보여 주며 있습니다. 이제 std::find_if 알고리즘과 이 비교기를 사용하노십시오.이 기사에서는 std::find 및 std:find_if 알고리즘과 사용자 정의 데이터 유형 즉 클래스 및 구조를 사용하는 방법을 볼 수 있습니다. std::find_if이 일반 비교기 functor, std::find 및 std:find_if 알고리즘은 주어진 범위에서 첫 번째 요소를 찾는 데 사용됩니다. 이 일반 비교기 functor를 정의하지 않으려면 std::find_if를 사용하여 항목 개체를 쉽게 찾을 수 있는 방법은 무엇입니까? C++11이 없는 경우 std::find_if_not과 동등한 것은 std::find_if를 부정된 술어와 함께 사용하는 것입니다. C++ 함수 std::algorithm::find_if()는 조건을 조정하는 요소의 첫 번째 발생을 찾습니다. 조건 지정을 위해 unary 술어를 사용합니다. constexpr 입력그것은 find_if_not (InputIt 먼저, InputIt 마지막, 다음 예제는 정수의 벡터에서 정수를 찾습니다. 범위 내의 첫 번째 요소를 가리키는 이터레이터는 조건자 함수 pred가 true를 반환합니다. 이터레이터는 val이 발견되지 않은 경우 연산자 == 즉 ID에 따라 두 항목 개체의 비교 논리를 하드 코딩한 경우 마지막으로 가리킵니다.

따라서 특정 가격으로 Item 개체를 검색해야하는 경우 == 연산을 사용할 수 없습니다. 그것을 하는 방법? pred(Unary Function)가 true를 반환하는 범위 [첫 번째, 마지막] 범위의 첫 번째 요소로 이터레이터를 반환합니다. 이러한 요소를 찾을 수 없는 경우 함수가 마지막으로 반환됩니다. 함수 템플릿 : . 그러나 개수를 기준으로 항목 개체를 검색해야 하는 경우 어떻게 해야 합니까? 그런 다음 위의 접근 방식을 기반으로 다른 비교 함수를 만들어야합니다. 그래서, 우리는 그것을 개선하기 위해 무엇을 할 수 있습니까? 유효하지 않은 매개 변수는 정의되지 않은 동작을 일으킵니다. 클래스의 모든 속성을 기반으로 검색을 위한 일반 비교기 functor를 만들 수 있습니다. 특정 기준을 충족하는 [첫 번째, 마지막] 범위의 첫 번째 요소를 반환합니다. 식 p(v)는 VT가 Value 범주에 관계없이 InputIt의 값 형식인 모든 형식(const) VT의 모든 인수 v에 대해 bool로 변환할 수 있어야 하며 v를 수정해서는 안 됩니다. 따라서 VT&의 매개 변수 형식은 허용되지 않으며 VT의 경우 이동이 복사본과 동일하지 않는 한 VT도 허용되지 않습니다(C++11 이후).

우리가 컴파일하고 위의 프로그램을 실행하자,이 다음과 같은 결과를 생성합니다 – 조건자 또는 이터레이터에 대한 작업이 예외를 throw하는 경우 예외를 throw합니다. 내부적으로 std::find 알고리즘은 비교를 위해 == 연산을 사용합니다. int, std::string etc 연산자 ==와 같은 기본 제공 데이터 형식의 경우 기본적으로 사용할 수 있지만 사용자 정의 데이터 형식즉 클래스 및 구조체의 경우 == 연산자를 정의해야 합니다. 조건을 만족하는 첫 번째 요소에 대한 이터레이터 또는 이러한 요소가 발견되지 않으면 마지막입니다. std::find는 비교를 위해 == 연산을 사용하므로 항목 클래스에서 opeartor ==를 정의합니다. 항목 개체 클래스 목록이 있다고 가정합니다. 각 항목 개체에는 ID, 가격 및 가용성 수와 같은 속성이 있습니다. 이제 이 벡터에서 특정 ID가 있는 항목 개체를 검색하려고 합니다.

pred – 하나의 인수를 수락하고 bool을 반환 하는 unary 술어. 우리는 std::find 알고리즘을 사용하여 그것을 할 것입니다. 먼저 Item 클래스를 볼 수 있습니다., 조건자 함수 pred true 반환 하는 범위에서 첫 번째 요소를 찾습니다. 첫 번째 => 마지막 범위의 시작을 가리키는 이터레이터 => 범위의 끝을 가리키는 이터레이터 => 조건자 함수(true 또는 false 반환)를 가리킵니다.