1)成员函数map.find调用的是等价,也就是!c.key_comp()(x, y) && !c.key_comp()(y, x),
算法find调用的是相等,如find(map.begin(), map.end(), a),调用的是对相等的operator ==
(2)find其实有两个,一个是算法的find,一个是map成员的find。成员的find是靠“<”,泛型算法的find靠的是"=="。
算法的find,类似find(map.begin(), map.end(), a)这种形式
所以调用find函数是Map的成员函数,类似map.find(a)这种形式,它只需要operator < 就够了
/*自定义结构体做为map里面的key的写法*/
/*其中一种写法:*/
struct hook_info {
string lib_name;
string fun_name;
int param_count;
bool bIATHook;
hook_info(char *lib, char* fun, int param, bool b) {
lib_name = lib;
fun_name = fun;
param_count = param;
bIATHook = b;
}
bool operator< ( const hook_info& a) const
{
if (this->lib_name.compare(a.lib_name) < 0)
return true ;
if (this->lib_name.compare(a.lib_name) > 0)
return false;
if (this->fun_name.compare(a.fun_name) < 0)
return true ;
if (this->fun_name.compare(a.fun_name) > 0)
return false;
if (this->param_count < a.param_count)
return true;
if (this->param_count > a.param_count)
return false;
if (this->bIATHook == false && a.bIATHook == true)
return true;
if (this->bIATHook == true && a.bIATHook == false)
return false;
return false;
}
};