typedef map<string,int> mapType;
mapType::const_iterator i;
i = find_if(d.begin(), d.end(), isalnum);
在「=」我正在錯誤:無法分配給mapType :: const_iterator? (「沒有運營商=匹配」)
Error:no operator "=" matches these operands
我知道find_if返回一旦預解碼解析爲真迭代器,那麼什麼是交易?
typedef map<string,int> mapType;
mapType::const_iterator i;
i = find_if(d.begin(), d.end(), isalnum);
在「=」我正在錯誤:無法分配給mapType :: const_iterator? (「沒有運營商=匹配」)
Error:no operator "=" matches these operands
我知道find_if返回一旦預解碼解析爲真迭代器,那麼什麼是交易?
的文檔,我們只能在錯誤的猜測,你只提供一半的問題。
假設d是mapType
和isalnum
正確的版本的問題是,該仿正被傳遞的對象到地圖類型:: VALUE_TYPE(這是怎麼地圖和所有容器存儲他們的值)。對於map而言,value_type實際上是一個實際實現爲std :: pair < Key,Value >的鍵/值對。所以你需要使用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());
}
使用如果d
是map
,那麼問題是在你試圖使用isalnum
。
isalnum
取單個int
參數,但由find_if
調用的謂詞收到map::value_type
。這些類型不兼容,所以你需要將find_if
修改爲`isalnum。如:
#include <cstdlib>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
typedef map<string,int> mapType;
bool is_alnum(mapType::value_type v)
{
return 0 != isalnum(v.second);
}
int main()
{
mapType::const_iterator i;
mapType d;
i = find_if(d.begin(), d.end(), is_alnum);
}
你可以發佈'd'聲明嗎? –