안녕하세요 삽잡이입니다.
이번시간에는 find_if 함수에 대해서 간략하게 알아보려고 합니다...
자료구조 배열에 대해서 알아보다가
find_if 함수가 뭔지 하는... 처음에 이해가 안갔었는데
그 이유가 함수 객체에 대한 이해 부족 때문이었습니다...
왜 안되지 하며 한참 째려보기만 했다는...
하지만 째려보면 반드시 승리하게 되있습니다. 계속해서 째려보세요~!
뭔 x소리인지... 죄송합니다.
참고로, 함수 객체에 대한 이해가 부족하시다면...
C++ 글의 함수 객체에 대한 글을 참고하시길 바랍니다...
우선, find_if 함수는
STL 에서 제공하고 있는 알고리즘인데요,
컨테이너... 그러니까 자료를 보관하고 있는 메모리 구조에서 원하는 데이터를 찾을 수 있도록
제공해주는 알고리즘입니다.
우선 원형을 살펴보시지요...
제 Visual Studio 에서 algolishm 헤더를 직접 include하여
정의로 들어가 확인해봤습니다...
뭔... x 소리인가요...
하하... 설명할 사람이 x소리라니... 말도 안되는... 모르는걸 이해하고 포스팅했으니
처음에는 x소리야 하면서 한참 째려봤습니다... 별거 아니였다는..
주석을 보면 처음으로 만족하는 _Pred를 찾는다고 하군요...
_Pred는 세번째 인자이며 '조건자'라고 부릅니다...
조건자란 뭘까요?
검색을 해보았는데, 알고리즘 중에서는 함수를 파라미터로 받아들이는 것이 다반사라고 합니다...
이 말이 뭐냐하면, find 함수를 잠깐 보여드리며 설명을 이어가도록 하겠습니다.
find 함수의 경우 세번째 인자로 찾을 값을 넘기고 있습니다.
find 함수의 한계는 기본 자료형의 데이터들만을 찾을 수 있기 때문에
사용자가 정의한 자료형에서 검색을 하지 못하는 안타까움이 있게 됩니다.
이와 같은 경우가 있기에 알고리즘 중 함수를 파라미터로 받는 경우가 다반사로 설명 드린 것입니다.
왜냐, 사용자가 정의한 형 까지 적용시키기 위해서라는 것이지요...
말을 계속 이어가도록 하겠습니다. 그래서 조건자가 뭐냐?
기본적으로 전달하는 인자들의 경우에는 기본 자료형만을 사용하는 한계가 있기 때문에
사용자 정의 형을 담는 데이터 구조 즉, 컨테이너에서의 사용을 위한 함수로써
정확하게는 predicate라고 부르며 참/거짓 or 정수값을 반환해주는 함수입니다.
자... 뻉 돌아서 왔습니다... 그래서 find_if에는 세번째 인자로 조건자가 들어가는데 말입니다.
이 조건자를 사용하기 위해서는,
내가 현재 정의한 자료형과 관련된 함수를 만들어서 그 함수를 넘겨줘야 합니다...
보통 함수 객체를 사용하는 편이 많다고 하네요...
그럼 find_if 에 대해 간략한 탐험을 시작해보독 하겠습니다...
정말 오랜만에 삽잡이가 등장 했습니다 하하하...
삽잡이 블로그를 처음 방문하시는 분이라면 처음 보시겠군요...
자 신나게 함수 안으로 들어들어들어가~~
계속 들어가~ 근데 안 끝나~~
계속 보니 결국 find_if 정의 된 곳 바로 위에 있더군요...
허무하도다 ... 역시 난 삽잡이야... 하하
아무튼.. 보시면 확인하실 수 있죠?
세번째 인자에 첫번째 iterator가 가리키는 값을 인자로 호출합니다.
아하! 그렇다는 것은, 세번째 인자로 만든 함수 객체에서
첫번째 인자와 비교하는 비교문을 만들어 놓고, 참 거짓을 반환 시키면 되겠군요!
이와 같이 말입니다...
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Function { int num; public: Function(int num) { this->num = num; } bool operator() (Member *member) { return num == member->GetNum(); } }; | cs |
'삽질의 현장 > - 자료구조와 알고리즘' 카테고리의 다른 글
#005_자료구조와 알고리즘_들어온 순서대로! 큐(Queue) (0) | 2015.08.04 |
---|---|
#004_자료구조와 알고리즘_Stack과 동적 프로그래밍 (0) | 2015.08.04 |
#003_자료구조와 알고리즘_누구보다 빠르게 Quick 정렬 (0) | 2015.08.03 |
#003_자료구조와 알고리즘_삽입 정렬 (0) | 2015.07.30 |
#001_자료구조와 알고리즘_프리뷰 + 정렬(버블 정렬, 선택 정렬) (0) | 2015.07.30 |