std::find_if

C++ 2011. 10. 21. 21:45
std::find_if() 의 세번째 인자를 객체의 멤버 메소드로 할 수 없다.
그렇게 하고 싶으면 boost 를 써야 함.


struct equal_string
{
equal_string(std::wstring& search) : search_(search) {
std::cout << "create equal_string" <<std::endl;
};

bool operator()(std::vector<std::wstring>::value_type& value) {
return (search_.compare(value) == 0);
}

std::wstring search_;
};


int _tmain(int argc, _TCHAR* argv[])
{
if(true) {
std::vector<std::wstring> vec;
vec.push_back(L"1");
vec.push_back(L"2");
vec.push_back(L"3");
vec.push_back(L"4");

std::wstring search = L"3";
std::vector<std::wstring>::iterator it;
it = std::find_if(vec.begin(), vec.end(), equal_string(search));
if (it == vec.end()) {
std::wcout << L"can't find" << std::endl;
} else {
std::wcout << L"finded : " << (*it).c_str() << std::endl;
}
}
}