2011-09-23 56 views

回答

1

std::find_if

的文檔,我們只能在錯誤的猜測,你只提供一半的問題。

假設d是mapTypeisalnum

正確的版本的問題是,該仿正被傳遞的對象到地圖類型:: 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()); 

} 
+0

這不是一個答案 –

+0

d是一個地圖的參考,我爲這個混亂道歉。 – bluetickk

+0

@Daniel A. White:至少我沒有猜到(錯誤地);-) –

0

使用如果dmap,那麼問題是在你試圖使用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); 
}