typedef map<string,int> mapType;
mapType::const_iterator i;

i = find_if( d.begin(), d.end(), isalnum );

在'='我收到错误:
Error:no operator "=" matches these operands

我知道一旦pred解析为true,find_if就返回一个迭代器,那该怎么办?

最佳答案

std::find_if的文档

我们只能猜测错误,因为您只提供了一半的问题。

假设d为mapType和正确的isalnum版本

问题在于,函子正在将一个对象传递给mapType::value_type(这是 map 和所有容器存储其值的方式)。对于map来说,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() );

}

10-04 20:42