您可以将 std::find_if 与 unary_function 结合使用,而不是从 map.begin() 循环到 map.end() 并为每个元素执行 lstrcmpW,如下所示:
class IsBSTREqual : public unary_function<std::pair<BSTR,int>,bool>
{
private:
BSTR str;
public:
IsBSTREqual(BSTR _str)
{
str = ::SysAllocString(_str);
}
~IsBSTREqual()
{
if(str)
{
::SysFreeString(str);
}
}
bool operator()(const std::pair<BSTR,int> &v)
{
if(!lstrcmpW(v.first,str))
{
return true;
}
return false;
}
};
BSTR abc = ::SysAllocString(L"String I want to find");
IsBSTREqual _pred(abc);
std::map<BSTR,int>::iterator _it =
std::find_if(attr_map.begin(),attr_map.end(),_pred);
if(_it != attr_map.end() )
{
cout<<"\nFound";
}
else
{
cout<<"\nNot found";
}