2017. 1. 4. 23:11ㆍIT-개발/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 |