Документация для std :: find_if
Мы можем только догадываться об ошибке, поскольку вы предоставили только половину проблемы.
Предполагая, что d равно mapType
и правильная версия isalnum
Проблема в том, что функтору передается объект в mapType :: value_type (именно так карта и все контейнеры хранят свое значение). Для карты value_type фактически является парой ключ / значение, фактически реализованной как std :: pair . Поэтому вам нужно получить вторую часть объекта для тестирования с помощью isalnum ().
Здесь я обернул этот перевод внутри другого функтора isAlphaNumFromMap, который может использоваться find_if
#include <map>
#include <string>
#include <algorithm>
// Using ctype.h brings the C functions into the global namespace
// If you use cctype instead it brings them into the std namespace
// Note: They may be n both namespaces according to the new standard.
#include <ctype.h>
typedef std::map<std::string,int> mapType;
struct isAlphaNumFromMap
{
bool operator()(mapType::value_type const& v) const
{
return ::isalnum(v.second);
}
};
int main()
{
mapType::const_iterator i;
mapType d;
i = std::find_if( d.begin(), d.end(), isAlphaNumFromMap() );
}