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() );
}