본문 바로가기
C++/C++

[C++] find, find_if 차이점

by sihyeong 2022. 12. 7.

find와 find_if는 둘 다 <algorithm> 헤더에 정의되어 있고 특정값이 있는지 찾아주는 역할을 한다.

 

find는 찾고자하는 값의 타입에 operator ==가 정의되어 있어야 찾을 수 있다.

 

if(a == b)처럼 비교를 통해서 비교해 찾기 때문인 것 같다.

 

반면에 find_id는 맨 마지막 인자로 조건식을 주면  조건식이 true가 나오는 값을 찾을 수 있다.

 

특히 vector<pair<int, int>>와 같은 식을 사용할 때 ==가 정의되어 있지 않아 find는 사용할 수 없고

 

find_if를 사용해 찾아야 한다.

 

vector<pair<int, int> v;

for(int i = 0; i < 3; i++)
{
	v.emplace_back(make_pair(i, i));
}

find(v.begin(), v.end(), 1);  
// X   pair<int,int>는 ==가 정의되어 있지 않음

 

vector<pair<int, int> v;

for(int i = 0; i < 3; i++)
{
	v.emplace_back(make_pair(i, i));
}

int findValue = 1;
auto it = find_if(v.begin(), v.end(), [findValue](const pair<int, int>& e){ return e.second == findValue;});  
// O   find_if를 통해 ==가 되는 조건식을 정의해줬기 때문에

if(v.end() != it)
{
	// 값을 찾음
}

'C++ > C++' 카테고리의 다른 글

[C++] socket 통신 데이터 송수신  (0) 2022.12.19
[C++] TCP socket 통신 구현  (0) 2022.12.19
[C++] 멤버함수포인터 소멸자 런타임 에러  (0) 2022.12.01
[C++] 함수포인터, 멤버 함수 포인터  (0) 2022.11.27
[C++] multiset  (1) 2022.11.24