이글은 예전 제 싸이월드 블로그에 작성한 글을 티스토리로 옮긴 것입니다.
원문 : http://cy.cyworld.com/home/21147242/post/5500EDA6EA95739A07C68401
원문 작성일 : 2015.3.12
============================================================
list 컨테이너에서 조건에 맞는 값을 찾고자 할 때 find_if() 함수를 쓴다.
조건값이 특정값이라면 함수객체(펑크터)를 사용해 쉽게 구현이 되지만
조건값을 변수 형태로 취하려면 어댑터 개념을 적용해야 한다.
C++ 기초 플러스, C++ Standard Library 책을 눈알 빠지게 봐도 뭔소린지 모르겠다.
결국 SOEN(http://www.soen.kr) 에서 도움을 받았다.
(SOEN ->C/C++ 강좌 ->4부.C++고급 ->38장 함수객체 ->바인더)
한국인이 쓴 책이 문장도 좋고 이해가 잘 될 때가 분명히 있다.
아래 코드는 보관용 수준으로 작성한 예제이다.
- list 에 4개의 값을 저장하였다.
- 이 중 나는 number 값이 1003인 이터레이터를 가져오고 싶다.
- 1003이 아닌 다른 값을 가져오고 싶다면, filter 변수값을 변경하면 된다.
아래 예제는 number가 1003인 구조체값을 가져와 그 구조체의 major 값을 찍었다.
원하는대로 값을 가져오고 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 |
#include <cstdio>
#include <list>
#include <algorithm>
#include <functional>
using namespace std ;
struct Program
{
int major ;
int number ;
int pid ;
} ;
class FindProgram : public binary_function<Program, int , bool >
{
public :
bool operator() ( const Program& p, int b) const
{
return (p.number == b) ;
}
} ;
int main()
{
list<Program> listProgram ;
list<Program> ::iterator listProgramIter ;
Program program ;
program.major = 7 ;
program.number = 1001 ;
program.pid = 0x20 ;
listProgram.push_back(program) ;
program.major = 7 ;
program.number = 1002 ;
program.pid = 0x21 ;
listProgram.push_back(program) ;
program.major = 9 ;
program.number = 1003 ;
program.pid = 0x22 ;
listProgram.push_back(program) ;
program.major = 11 ;
program.number = 1004 ;
program.pid = 0x23 ;
listProgram.push_back(program) ;
int filter = 1003 ;
listProgramIter = find_if(listProgram.begin(), listProgram.end(), bind2nd(FindProgram(), filter)) ;
if(listProgramIter != listProgram.end())
{
printf("val : %d\n", listProgramIter->major) ;
}
return 1;
}
|
'삽질미학 > C,C++' 카테고리의 다른 글
[Linux/C++] TCP Server-Client 연결 예제 (0) | 2017.03.30 |
---|---|
유니코드(Unicode)를 UTF-8로 변환하기 (0) | 2017.03.30 |
string class를 이용한 Big Integer(BigInt) 계산기 구현 (0) | 2017.01.09 |
파일값을 이용한 bisection search - class (0) | 2017.01.09 |
파일의 값을 이용한 bisection search (0) | 2017.01.09 |