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 |