【基礎】結構體重載,用 char*作為std::map中的key
阿新 • • 發佈:2018-05-02
重載 http 註意 urn .net 參考 article 添加 無法
map<string,int> 119ms 89ms
map<char*,int> 9ms 6ms
聲明map時需要添加一個cmp比較函數,不然map在比較時,使用char *的指針進行比較,而不是比較char字符串。
結構體重載
C++中,結構體是無法進行==,>,<,>=,<=,!=這些操作的,這也帶來了很多不方便的地方,尤其是在使用STL容器的時候,如果我們可以往語句中傳入結構體,一些事情將會變得很簡單。bool operator 運算符 (const 結構體名稱 b) const { return(什麽時候這個運算符對結構體成立);//註意對此運算符使用this->元素名; }
用 char*作為std::map中的key
首先為什麽要用 char*作為std::map中的key
map<char*,int>和map<string,int>在插入和存儲效率的對比。 插入100000條 查詢100000次#include <cstring> struct cmp_str { bool operator()(char const *a, char const *b) { return std::strcmp(a, b) < 0; } }; int main ( int argc, char ** argv ) { std::map<const char*, int, cmp_str> map; map["aa"] = 1; map["ca"] = 2; map["ea"] = 3; map["ba"] = 4; map["ba"] = 5; map["bb"] = 6; map["ba"] = 7; std::map<const char*, int, cmp_str>::iterator it = map.begin(); for (; it != map.end(); it++ ) { std::cout << (*it).first << ": " << (*it).second << std::endl; } return 0; }
參考博客:
用 char*作為std::map中的key
map<char*,int>和map<string,int>的效率對比?
【基礎】結構體重載,用 char*作為std::map中的key