在C++中用到map時,如果KEY是自定義的struct,那么需要自己定義比較函數。因為只有基本類型有默認的比較方法。
定義的方法有兩種,一是在作為key的struct中,重載操作符less(<),二是自定義仿函數作為map的比較函數,個人比較喜歡第二種方法。
//自定義map的key typedef struct UrlKey { uint64_t dwBussID; uint64_t dwVersion; uint64_t dwHashUrl; }UrlKey; //自定義map的value typedef struct UrlValue { string strUrl; }UrlValue; //map的比較函數 struct cmp_key { bool operator()(const UrlKey &k1, const UrlKey &k2)const { if(k1.dwBussID != k2.dwBussID) { return k1.dwBussID < k2.dwBussID; } if(k1.dwVersion != k2.dwVersion) { return k1.dwVersion < k2.dwVersion; } if(k1.dwHashUrl != k2.dwHashUrl) { return k1.dwHashUrl < k2.dwHashUrl; } return false; } }; int main() { map<UrlKey, UrlValue, cmp_key> UrlMap; UrlKey stKey; stKey.dwBussID = 1; stKey.dwVersion = 2; stKey.dwHashUrl = 3; UrlValue stValue; stValue.strUrl = "abc"; UrlMap[stKey] = stValue; return 0; }