STL - algorithm - find

2017. 1. 4. 23:11IT-개발/C및C++

반응형


// ItemCodes 컨테이너의 시작과 끝 사이에서 15를 찾는다.

find( ItemCodes.begin(), ItemCodes.end(), 15 );


#include <algorithm>

#include <vector>

#include <iostream>

using namespace std;

int main()

{

vector< int > CharItems;

CharItems.push_back( 12 );

CharItems.push_back( 100 );

CharItems.push_back( 77 );

vector< int >::iterator FindIter;


// CharItems의 처음과 끝에서 12를 찾는다.

FindIter = find( CharItems.begin(), CharItems.end(), 12 );

if( FindIter != CharItems.end() )

{

cout << "CharItem 12를 찾았습니다." << endl;

}

else

{

cout << "CharItem 12는 없습니다" << endl;

}

}


// vector 이외의 list, deque도 같은 방식으로 사용


// find_if

template<class InputIterator, class Predicate>

InputIterator find_if( InputIterator _First, InputIterator _Last, Predicate_Pred );


find는 세 번째 파라미터에 찾기 원하는 값을 넘기지만 find_if는 조건자를 넘긴다.


#include <algorithm>

#include <vector>

#include <iostream>

using namespace std;

struct User

{

int Money;

int Level;

};


struct FindMoneyUser

{

bool operator() ( User& user ) const { return user.Money == CompareMoney; }

int CompareMoney;

};


int main()

{

vector< User > Users;

User user1; user1.Level = 10; user1.Money = 2000;

User user2; user2.Level = 5; user2.Money = -10;

User user3; user3.Level = 20; user3.Money = 35000;

Users.push_back( user1 );

Users.push_back( user2 );

Users.push_back( user3 );


vector< User >::iterator FindUser;

FindMoneyUser tFindMoneyUser;

tFindMoneyUser.CompareMoney = 2000;

FindUser = find_if( Users.begin(), Users.end(), tFindMoneyUser );

if( FindUser != Users.end() )

{

cout << "소지하고 있는 돈은: " << FindUser->Money << "입니다" << endl;

}

else

{

cout << " 유저가 없습니다. " << endl;

}

return 0;

}


NOTE_ 조건자를 사용하는 알고리즘 : STL의 알고리즘은 조건자를 사용하지 않는 것과 조건자

를 사용하는 알고리즘 두 가지 버전을 가지고 있는 알고리즘이 있다. 이중 조건자를 사용하는 알

고리즘은 보통 조건자를 사용하지 않는 알고리즘의 이름에서 뒤에 '_if'를 붙인 이름으로 되어 있다.



'IT-개발 > C및C++' 카테고리의 다른 글

STL - algorithm - generate  (0) 2017.01.04
STL - algorithm - for_each  (0) 2017.01.04
STL - algorithm  (0) 2017.01.04
STL - Set - sample(2)  (0) 2017.01.04
STL - Set - sample(1)  (0) 2017.01.04