{"id":1213,"date":"2018-05-03T23:58:11","date_gmt":"2018-05-03T15:58:11","guid":{"rendered":"https:\/\/damogame.cn:15443\/wordpress\/?p=1213"},"modified":"2018-05-03T23:58:11","modified_gmt":"2018-05-03T15:58:11","slug":"map%ef%bc%8chash_map%e5%92%8cunordered_map-%e5%ae%9e%e7%8e%b0%e6%af%94%e8%be%83","status":"publish","type":"post","link":"https:\/\/i007.cc\/wordpress\/archives\/1213","title":{"rendered":"map\uff0chash_map\u548cunordered_map \u5b9e\u73b0\u6bd4\u8f83"},"content":{"rendered":"<div class=\"clear\"><\/div>\n<div class=\"postBody\">\n<div id=\"cnblogs_post_body\" class=\"blogpost-body\">\n<h4>map\u4ecb\u7ecd<\/h4>\n<p>Map\u662fSTL[1]\u7684\u4e00\u4e2a\u5173\u8054\u5bb9\u5668\uff0c\u5b83\u63d0\u4f9b\u4e00\u5bf9\u4e00\uff08\u5176\u4e2d\u7b2c\u4e00\u4e2a\u53ef\u4ee5\u79f0\u4e3a\u5173\u952e\u5b57\uff0c\u6bcf\u4e2a\u5173\u952e\u5b57\u53ea\u80fd\u5728map\u4e2d\u51fa\u73b0\u4e00\u6b21\uff0c\u7b2c\u4e8c\u4e2a\u53ef\u80fd\u79f0\u4e3a\u8be5\u5173\u952e\u5b57\u7684\u503c\uff09\u7684\u6570\u636e\u5904\u7406\u80fd\u529b\uff0c\u7531\u4e8e\u8fd9\u4e2a\u7279\u6027\uff0c\u5b83\u5b8c\u6210\u6709\u53ef\u80fd\u5728\u6211\u4eec\u5904\u7406\u4e00\u5bf9\u4e00\u6570\u636e\u7684\u65f6\u5019\uff0c\u5728\u7f16\u7a0b\u4e0a\u63d0\u4f9b\u5feb\u901f\u901a\u9053\u3002\u8fd9\u91cc\u8bf4<strong>\u4e0bmap\u5185\u90e8\u6570\u636e\u7684\u7ec4\u7ec7\uff0cmap\u5185\u90e8\u81ea\u5efa\u4e00\u9897\u7ea2\u9ed1\u6811\uff08\u4e00\u79cd\u975e\u4e25\u683c\u610f\u4e49\u4e0a\u7684\u5e73\u8861\u4e8c\u53c9\u6811\uff09\uff0c\u8fd9\u9897\u6811\u5177\u6709\u5bf9\u6570\u636e\u81ea\u52a8\u6392\u5e8f\u7684\u529f\u80fd\uff0c\u6240\u4ee5\u5728map\u5185\u90e8\u6240\u6709\u7684\u6570\u636e\u90fd\u662f\u6709\u5e8f\u7684<\/strong>\uff0c\u540e\u8fb9\u6211\u4eec\u4f1a\u89c1\u8bc6\u5230\u6709\u5e8f\u7684\u597d\u5904\u3002<\/p>\n<h4><a name=\"t2\"><\/a>hash_map\u4ecb\u7ecd<\/h4>\n<p>hash_map\u57fa\u4e8ehash table\uff08\u54c8\u5e0c\u8868\uff09\u3002 \u54c8\u5e0c\u8868\u6700\u5927\u7684\u4f18\u70b9\uff0c<strong>\u5c31\u662f\u628a\u6570\u636e\u7684\u5b58\u50a8\u548c\u67e5\u627e\u6d88\u8017\u7684\u65f6\u95f4\u5927\u5927\u964d\u4f4e<\/strong>\uff0c\u51e0\u4e4e\u53ef\u4ee5\u770b\u6210\u662f\u5e38\u6570\u65f6\u95f4\uff1b\u800c\u4ee3\u4ef7\u4ec5\u4ec5\u662f\u6d88\u8017\u6bd4\u8f83\u591a\u7684\u5185\u5b58\u3002\u7136\u800c\u5728\u5f53\u524d\u53ef\u5229\u7528\u5185\u5b58\u8d8a\u6765\u8d8a\u591a\u7684\u60c5\u51b5\u4e0b\uff0c\u7528\u7a7a\u95f4\u6362\u65f6\u95f4\u7684\u505a\u6cd5\u662f\u503c\u5f97\u7684\u3002\u53e6\u5916\uff0c\u7f16\u7801\u6bd4\u8f83\u5bb9\u6613\u4e5f\u662f\u5b83\u7684\u7279\u70b9\u4e4b\u4e00\u3002<\/p>\n<p>\u5176\u57fa\u672c\u539f\u7406\u662f\uff1a<strong>\u4f7f\u7528\u4e00\u4e2a\u4e0b\u6807\u8303\u56f4\u6bd4\u8f83\u5927\u7684\u6570\u7ec4\u6765\u5b58\u50a8\u5143\u7d20\u3002\u53ef\u4ee5\u8bbe\u8ba1\u4e00\u4e2a\u51fd\u6570\uff08\u54c8\u5e0c\u51fd\u6570\uff0c\u4e5f\u53eb\u505a\u6563\u5217\u51fd\u6570\uff09\uff0c\u4f7f\u5f97\u6bcf\u4e2a\u5143\u7d20\u7684\u5173\u952e\u5b57\u90fd\u4e0e\u4e00\u4e2a\u51fd\u6570\u503c\uff08\u5373\u6570\u7ec4\u4e0b\u6807\uff0chash\u503c\uff09\u76f8\u5bf9\u5e94\uff0c\u4e8e\u662f\u7528\u8fd9\u4e2a\u6570\u7ec4\u5355\u5143\u6765\u5b58\u50a8\u8fd9\u4e2a\u5143\u7d20\uff1b\u4e5f\u53ef\u4ee5\u7b80\u5355\u7684\u7406\u89e3\u4e3a\uff0c\u6309\u7167\u5173\u952e\u5b57\u4e3a\u6bcf\u4e00\u4e2a\u5143\u7d20\u201c\u5206\u7c7b\u201d\uff0c\u7136\u540e\u5c06\u8fd9\u4e2a\u5143\u7d20\u5b58\u50a8\u5728\u76f8\u5e94\u201c\u7c7b\u201d\u6240\u5bf9\u5e94\u7684\u5730\u65b9\uff0c\u79f0\u4e3a\u6876\u3002<\/strong><\/p>\n<p>\u4f46\u662f\uff0c\u4e0d\u80fd\u591f\u4fdd\u8bc1\u6bcf\u4e2a\u5143\u7d20\u7684\u5173\u952e\u5b57\u4e0e\u51fd\u6570\u503c\u662f\u4e00\u4e00\u5bf9\u5e94\u7684\uff0c\u56e0\u6b64\u6781\u6709\u53ef\u80fd\u51fa\u73b0\u5bf9\u4e8e\u4e0d\u540c\u7684\u5143\u7d20\uff0c\u5374\u8ba1\u7b97\u51fa\u4e86\u76f8\u540c\u7684\u51fd\u6570\u503c\uff0c\u8fd9\u6837\u5c31\u4ea7\u751f\u4e86\u201c\u51b2\u7a81\u201d\uff0c\u6362\u53e5\u8bdd\u8bf4\uff0c\u5c31\u662f\u628a\u4e0d\u540c\u7684\u5143\u7d20\u5206\u5728\u4e86\u76f8\u540c\u7684\u201c\u7c7b\u201d\u4e4b\u4e2d\u3002 \u603b\u7684\u6765\u8bf4\uff0c\u201c\u76f4\u63a5\u5b9a\u5740\u201d\u4e0e\u201c\u89e3\u51b3\u51b2\u7a81\u201d\u662f\u54c8\u5e0c\u8868\u7684\u4e24\u5927\u7279\u70b9\u3002<\/p>\n<p>hash_map\uff0c\u9996\u5148\u5206\u914d\u4e00\u5927\u7247\u5185\u5b58\uff0c\u5f62\u6210\u8bb8\u591a\u6876\u3002\u662f\u5229\u7528hash\u51fd\u6570\uff0c\u5bf9key\u8fdb\u884c\u6620\u5c04\u5230\u4e0d\u540c\u533a\u57df\uff08\u6876\uff09\u8fdb\u884c\u4fdd\u5b58\u3002\u5176\u63d2\u5165\u8fc7\u7a0b\u662f\uff1a<\/p>\n<p>1.\u5f97\u5230key<br \/>\n2.\u901a\u8fc7hash\u51fd\u6570\u5f97\u5230hash\u503c<br \/>\n3.\u5f97\u5230\u6876\u53f7(\u4e00\u822c\u90fd\u4e3ahash\u503c\u5bf9\u6876\u6570\u6c42\u6a21)<br \/>\n4.\u5b58\u653ekey\u548cvalue\u5728\u6876\u5185\u3002<br \/>\n\u5176\u53d6\u503c\u8fc7\u7a0b\u662f:<br \/>\n1.\u5f97\u5230key<br \/>\n2.\u901a\u8fc7hash\u51fd\u6570\u5f97\u5230hash\u503c<br \/>\n3.\u5f97\u5230\u6876\u53f7(\u4e00\u822c\u90fd\u4e3ahash\u503c\u5bf9\u6876\u6570\u6c42\u6a21)<br \/>\n4.\u6bd4\u8f83\u6876\u7684\u5185\u90e8\u5143\u7d20\u662f\u5426\u4e0ekey\u76f8\u7b49\uff0c\u82e5\u90fd\u4e0d\u76f8\u7b49\uff0c\u5219\u6ca1\u6709\u627e\u5230\u3002<br \/>\n5.\u53d6\u51fa\u76f8\u7b49\u7684\u8bb0\u5f55\u7684value\u3002<br \/>\nhash_map\u4e2d\u76f4\u63a5\u5730\u5740\u7528hash\u51fd\u6570\u751f\u6210\uff0c\u89e3\u51b3\u51b2\u7a81\uff0c\u7528\u6bd4\u8f83\u51fd\u6570\u89e3\u51b3\u3002\u8fd9\u91cc\u53ef\u4ee5\u770b\u51fa\uff0c\u5982\u679c\u6bcf\u4e2a\u6876\u5185\u90e8\u53ea\u6709\u4e00\u4e2a\u5143\u7d20\uff0c\u90a3\u4e48\u67e5\u627e\u7684\u65f6\u5019\u53ea\u6709\u4e00\u6b21\u6bd4\u8f83\u3002\u5f53\u8bb8\u591a\u6876\u5185\u6ca1\u6709\u503c\u65f6\uff0c\u8bb8\u591a\u67e5\u8be2\u5c31\u4f1a\u66f4\u5feb\u4e86(\u6307\u67e5\u4e0d\u5230\u7684\u65f6\u5019).<\/p>\n<p>\u7531\u6b64\u53ef\u89c1\uff0c\u8981\u5b9e\u73b0\u54c8\u5e0c\u8868, \u548c\u7528\u6237\u76f8\u5173\u7684\u662f\uff1ahash\u51fd\u6570\u548c\u6bd4\u8f83\u51fd\u6570\u3002\u8fd9\u4e24\u4e2a\u53c2\u6570\u521a\u597d\u662f\u6211\u4eec\u5728\u4f7f\u7528hash_map\u65f6\u9700\u8981\u6307\u5b9a\u7684\u53c2\u6570\u3002<\/p>\n<p>&nbsp;<\/p>\n<h4><a name=\"t3\"><\/a>\u00a0unordered_map\u4ecb\u7ecd<\/h4>\n<p>Unordered maps are associative containers that store elements formed by the combination of a\u00a0<em>key value<\/em>\u00a0and a<em>mapped value<\/em>, and which allows for fast retrieval of individual elements based on their keys.<\/p>\n<p>In an\u00a0<tt>unordered_map<\/tt>, the\u00a0<em>key value<\/em>\u00a0is generally used to uniquely identify the element, while the\u00a0<em>mapped value<\/em>\u00a0is an object with the content associated to this\u00a0<em>key<\/em>. Types of\u00a0<em>key<\/em>\u00a0and\u00a0<em>mapped<\/em>\u00a0value may differ.<\/p>\n<p>Internally, the elements in the\u00a0<tt>unordered_map<\/tt>\u00a0are not sorted in any particular order with respect to either their<em>key<\/em>\u00a0or\u00a0<em>mapped<\/em>\u00a0values, but organized into\u00a0<em>buckets<\/em>\u00a0depending on their hash values to allow for fast access to individual elements directly by their\u00a0<em>key values<\/em>\u00a0(with a constant average time complexity on average).<\/p>\n<p><tt>unordered_map<\/tt>\u00a0containers are faster than\u00a0<tt>map<\/tt>\u00a0containers to access individual elements by their\u00a0<em>key<\/em>, although they are generally less efficient for range iteration through a subset of their elements.<\/p>\n<p>Unordered maps implement the direct access operator (<tt>operator[]<\/tt>) which allows for direct access of the<em>mapped value<\/em>\u00a0using its\u00a0<em>key value<\/em>\u00a0as argument.<\/p>\n<h4><a name=\"t4\"><\/a>unordered_map\u4e0emap\u7684\u533a\u522b<\/h4>\n<p>boost::unordered_map\uff0c \u5b83\u4e0e stl::map\u7684\u533a\u522b\u5c31\u662f\uff0cstl::map\u662f\u6309\u7167operator&lt;\u6bd4\u8f83\u5224\u65ad\u5143\u7d20\u662f\u5426\u76f8\u540c\uff0c\u4ee5\u53ca\u6bd4\u8f83\u5143\u7d20\u7684\u5927\u5c0f\uff0c\u7136\u540e\u9009\u62e9\u5408\u9002\u7684\u4f4d\u7f6e\u63d2\u5165\u5230\u6811\u4e2d\u3002\u6240\u4ee5\uff0c\u5982\u679c\u5bf9map\u8fdb\u884c\u904d\u5386\uff08\u4e2d\u5e8f\u904d\u5386\uff09\u7684\u8bdd\uff0c\u8f93\u51fa\u7684\u7ed3\u679c\u662f\u6709\u5e8f\u7684\u3002\u987a\u5e8f\u5c31\u662f\u6309\u7167operator&lt; \u5b9a\u4e49\u7684\u5927\u5c0f\u6392\u5e8f\u3002<br \/>\n\u800cboost::unordered_map\u662f\u8ba1\u7b97\u5143\u7d20\u7684Hash\u503c\uff0c\u6839\u636eHash\u503c\u5224\u65ad\u5143\u7d20\u662f\u5426\u76f8\u540c\u3002\u6240\u4ee5\uff0c\u5bf9unordered_map\u8fdb\u884c\u904d\u5386\uff0c\u7ed3\u679c\u662f\u65e0\u5e8f\u7684\u3002<br \/>\n\u7528\u6cd5\u7684\u533a\u522b\u5c31\u662f\uff0cstl::map \u7684key\u9700\u8981\u5b9a\u4e49operator&lt; \u3002 \u800cboost::unordered_map\u9700\u8981\u5b9a\u4e49hash_value\u51fd\u6570\u5e76\u4e14\u91cd\u8f7doperator==\u3002\u5bf9\u4e8e\u5185\u7f6e\u7c7b\u578b\uff0c\u5982string\uff0c\u8fd9\u4e9b\u90fd\u4e0d\u7528\u64cd\u5fc3\u3002\u5bf9\u4e8e\u81ea\u5b9a\u4e49\u7684\u7c7b\u578b\u505akey\uff0c\u5c31\u9700\u8981\u81ea\u5df1\u91cd\u8f7doperator&lt; \u6216\u8005hash_value()\u4e86\u3002<br \/>\n\u6700\u540e\uff0c\u8bf4\uff0c\u5f53\u4e0d\u9700\u8981\u7ed3\u679c\u6392\u597d\u5e8f\u65f6\uff0c\u6700\u597d\u7528unordered_map\u3002<br \/>\n\u5176\u5b9e\uff0cstl::map\u5bf9\u4e8e\u4e0ejava\u4e2d\u7684TreeMap\uff0c\u800cboost::unordered_map\u5bf9\u5e94\u4e8ejava\u4e2d\u7684HashMap\u3002<\/p>\n<p>&nbsp;<\/p>\n<div class=\"bar\">\n<div class=\"tools\">\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>[cpp] view plain copy\r\n \r\n\/** \r\n\u6bd4\u8f83map\u3001hash_map\u548cunordered_map\u7684\u6267\u884c\u6548\u7387\u4ee5\u53ca\u5185\u5b58\u5360\u7528\u60c5\u51b5 \r\n**\/  \r\n  \r\n#include &lt;sys\/types.h&gt;  \r\n#include &lt;unistd.h&gt;  \r\n#include &lt;sys\/time.h&gt;   \r\n#include &lt;iostream&gt;  \r\n#include &lt;fstream&gt;  \r\n#include &lt;string&gt;  \r\n#include &lt;map&gt;  \r\n#include &lt;ext\/hash_map&gt;  \r\n#include &lt;tr1\/unordered_map&gt;  \r\n  \r\nusing namespace std;  \r\n  \r\nusing namespace __gnu_cxx;  \r\n  \r\nusing namespace std::tr1;  \r\n  \r\n#define N 100000000  \/\/\u5206\u522b\u6d4b\u8bd5N=100,000\u3001N=1,000,000\u3001N=10,000,000\u4ee5\u53caN=100,000,000  \r\n  \r\n\/\/\u5206\u522b\u5b9a\u4e49MapKey=map&lt;int,int&gt;\u3001hash_map&lt;int,int&gt;\u3001unordered_map&lt;int,int&gt;  \r\n\/\/typedef map&lt;int,int&gt; MapKey;          \/\/\u91c7\u7528map  \r\n\/\/typedef hash_map&lt;int,int&gt; MapKey;     \/\/\u91c7\u7528hash_map  \r\ntypedef unordered_map&lt;int,int&gt; MapKey;  \/\/\u91c7\u7528unordered_map  \r\n  \r\n  \r\n  \r\nint GetPidMem(pid_t pid,string&amp; memsize)  \r\n{  \r\n    char filename[1024];  \r\n      \r\n    snprintf(filename,sizeof(filename),\"\/proc\/%d\/status\",pid);  \r\n      \r\n    ifstream fin;  \r\n      \r\n    fin.open(filename,ios::in);  \r\n    if (! fin.is_open())  \r\n    {  \r\n        cout&lt;&lt;\"open \"&lt;&lt;filename&lt;&lt;\" error!\"&lt;&lt;endl;  \r\n        return (-1);  \r\n    }  \r\n      \r\n    char buf[1024];  \r\n    char size[100];  \r\n    char unit[100];  \r\n      \r\n    while(fin.getline(buf,sizeof(buf)-1))  \r\n    {  \r\n        if (0 != strncmp(buf,\"VmRSS:\",6))  \r\n            continue;  \r\n          \r\n        sscanf(buf+6,\"%s%s\",size,unit);  \r\n          \r\n        memsize = string(size)+string(unit);  \r\n    }  \r\n      \r\n    fin.close();  \r\n      \r\n    return 0;  \r\n}  \r\n  \r\nint main(int argc, char *argv[])  \r\n{  \r\n    struct timeval begin;  \r\n      \r\n    struct timeval end;  \r\n          \r\n    MapKey MyMap;  \r\n      \r\n    gettimeofday(&amp;begin,NULL);  \r\n      \r\n    for(int i=0;i&lt;N;++i)  \r\n        MyMap.insert(make_pair(i,i));  \r\n      \r\n    gettimeofday(&amp;end,NULL);  \r\n      \r\n    cout&lt;&lt;\"insert N=\"&lt;&lt;N&lt;&lt;\",cost=\"&lt;&lt;end.tv_sec-begin.tv_sec + float(end.tv_usec-begin.tv_usec)\/1000000&lt;&lt;\" sec\"&lt;&lt;endl;  \r\n      \r\n    for(int i=0;i&lt;N;++i)  \r\n        MyMap.find(i);  \r\n  \r\n    gettimeofday(&amp;end,NULL);  \r\n      \r\n    cout&lt;&lt;\"insert and getall N=\"&lt;&lt;N&lt;&lt;\",cost=\"&lt;&lt;end.tv_sec-begin.tv_sec + float(end.tv_usec-begin.tv_usec)\/1000000&lt;&lt;\" sec\"&lt;&lt;endl;  \r\n      \r\n    string memsize;  \r\n      \r\n    GetPidMem(getpid(),memsize);  \r\n      \r\n    cout&lt;&lt;memsize&lt;&lt;endl;  \r\n      \r\n    return 0;  \r\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<h3><a name=\"t6\"><\/a>\u8fd0\u884c\u7ed3\u679c<\/h3>\n<p>\u8bb0\u5f55\u6570N=100000\u65f6\uff0c\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\">Map\u7c7b\u578b<\/td>\n<td valign=\"top\">\u63d2\u5165\u8017\u65f6\uff0c\u5355\u4f4d\u79d2<\/td>\n<td valign=\"top\">\u63d2\u5165\u52a0\u904d\u5386\u8017\u65f6\uff0c\u5355\u4f4d\u79d2<\/td>\n<td valign=\"top\">\u5185\u5b58\u5360\u7528\u60c5\u51b5<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">map<\/td>\n<td valign=\"top\">0.110705<\/td>\n<td valign=\"top\">0.171859<\/td>\n<td valign=\"top\">5,780kB<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">hash_map<\/td>\n<td valign=\"top\">0.079074<\/td>\n<td valign=\"top\">0.091751<\/td>\n<td valign=\"top\">5,760kB<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">unordered_map<\/td>\n<td valign=\"top\">0.041311<\/td>\n<td valign=\"top\">0.050298<\/td>\n<td valign=\"top\">5,216kB<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>\u8bb0\u5f55\u6570N=1000000\u65f6\uff0c\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\">Map\u7c7b\u578b<\/td>\n<td valign=\"top\">\u63d2\u5165\u8017\u65f6\uff0c\u5355\u4f4d\u79d2<\/td>\n<td valign=\"top\">\u63d2\u5165\u52a0\u904d\u5386\u8017\u65f6\uff0c\u5355\u4f4d\u79d2<\/td>\n<td valign=\"top\">\u5185\u5b58\u5360\u7528\u60c5\u51b5<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">map<\/td>\n<td valign=\"top\">1.22678<\/td>\n<td valign=\"top\">1.95435<\/td>\n<td valign=\"top\">47,960kB<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">hash_map<\/td>\n<td valign=\"top\">0.684772<\/td>\n<td valign=\"top\">0.814646<\/td>\n<td valign=\"top\">44,632kB<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">unordered_map<\/td>\n<td valign=\"top\">0.311155<\/td>\n<td valign=\"top\">0.386898<\/td>\n<td valign=\"top\">40,604kB<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>\u8bb0\u5f55\u6570N=10000000\u65f6\uff0c\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\">Map\u7c7b\u578b<\/td>\n<td valign=\"top\">\u63d2\u5165\u8017\u65f6\uff0c\u5355\u4f4d\u79d2<\/td>\n<td valign=\"top\">\u63d2\u5165\u52a0\u904d\u5386\u8017\u65f6\uff0c\u5355\u4f4d\u79d2<\/td>\n<td valign=\"top\">\u5185\u5b58\u5360\u7528\u60c5\u51b5<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">map<\/td>\n<td valign=\"top\">14.9517<\/td>\n<td valign=\"top\">23.9928<\/td>\n<td valign=\"top\">469,844kB<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">hash_map<\/td>\n<td valign=\"top\">5.93318<\/td>\n<td valign=\"top\">7.18117<\/td>\n<td valign=\"top\">411,904kB<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">unordered_map<\/td>\n<td valign=\"top\">3.64201<\/td>\n<td valign=\"top\">4.43355<\/td>\n<td valign=\"top\">453,920kB<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>\u8bb0\u5f55\u6570N=100000000\u65f6\uff0c\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\">Map\u7c7b\u578b<\/td>\n<td valign=\"top\">\u63d2\u5165\u8017\u65f6\uff0c\u5355\u4f4d\u79d2<\/td>\n<td valign=\"top\">\u63d2\u5165\u52a0\u904d\u5386\u8017\u65f6\uff0c\u5355\u4f4d\u79d2<\/td>\n<td valign=\"top\">\u5185\u5b58\u5360\u7528\u60c5\u51b5<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">map<\/td>\n<td valign=\"top\">167.941<\/td>\n<td valign=\"top\">251.591<\/td>\n<td valign=\"top\">4,688,692kB<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">hash_map<\/td>\n<td valign=\"top\">46.3518<\/td>\n<td valign=\"top\">57.6972<\/td>\n<td valign=\"top\">3,912,632kB<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">unordered_map<\/td>\n<td valign=\"top\">28.359<\/td>\n<td valign=\"top\">35.122<\/td>\n<td valign=\"top\">4,3012,56kB<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h3><a name=\"t7\"><\/a>\u7ed3\u679c\u5206\u6790<\/h3>\n<p>\u8fd0\u884c\u6548\u7387\u65b9\u9762\uff1aunordered_map\u6700\u9ad8\uff0chash_map\u5176\u6b21\uff0c\u800cmap\u6548\u7387\u6700\u4f4e<\/p>\n<p>\u5360\u7528\u5185\u5b58\u65b9\u9762\uff1ahash_map\u5185\u5b58\u5360\u7528\u6700\u4f4e\uff0cunordered_map\u5176\u6b21\uff0c\u800cmap\u5360\u7528\u6700\u9ad8<\/p>\n<p>&nbsp;<\/p>\n<p>stl::map<\/p>\n<p>&nbsp;<\/p>\n<div class=\"dp-highlighter bg_cpp\">\n<div class=\"bar\">\n<div class=\"tools\"><strong>[cpp]<\/strong>\u00a0<a class=\"ViewSource\" title=\"view plain\" href=\"http:\/\/blog.csdn.net\/orzlzro\/article\/details\/7099231\">view plain<\/a><span class=\"tracking-ad\" data-mod=\"popu_168\">\u00a0<a class=\"CopyToClipboard\" title=\"copy\" href=\"http:\/\/blog.csdn.net\/orzlzro\/article\/details\/7099231\">copy<\/a><\/span><\/p>\n<div><\/div>\n<\/div>\n<\/div>\n<ol class=\"dp-cpp\" start=\"1\">\n<li class=\"alt\"><span class=\"preprocessor\">#include&lt;string&gt;\u00a0\u00a0<\/span><\/li>\n<li><span class=\"preprocessor\">#include&lt;iostream&gt;\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#include&lt;map&gt;\u00a0\u00a0<\/span><\/li>\n<li><\/li>\n<li class=\"alt\"><span class=\"keyword\">using\u00a0namespace\u00a0std;\u00a0\u00a0<\/span><\/li>\n<li><\/li>\n<li class=\"alt\"><span class=\"keyword\">struct\u00a0person\u00a0\u00a0<\/span><\/li>\n<li>{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0string\u00a0name;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int\u00a0age;\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0person(string\u00a0name,\u00a0<span class=\"datatypes\">int\u00a0age)\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">this-&gt;name\u00a0=\u00a0\u00a0name;\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">this-&gt;age\u00a0=\u00a0age;\u00a0\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">bool\u00a0operator\u00a0&lt;\u00a0(<span class=\"keyword\">const\u00a0person&amp;\u00a0p)\u00a0const\u00a0\u00a0<\/span><\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">return\u00a0this-&gt;age\u00a0&lt;\u00a0p.age;\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li>};<\/li>\n<li class=\"alt\"><\/li>\n<li>map&lt;person,<span class=\"datatypes\">int&gt;\u00a0m;\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\"><span class=\"datatypes\">int\u00a0main()\u00a0\u00a0<\/span><\/li>\n<li>{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0person\u00a0p1(<span class=\"string\">&#8220;Tom1&#8221;,20);\u00a0\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0person\u00a0p2(<span class=\"string\">&#8220;Tom2&#8221;,22);\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0person\u00a0p3(<span class=\"string\">&#8220;Tom3&#8221;,22);\u00a0\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0person\u00a0p4(<span class=\"string\">&#8220;Tom4&#8221;,23);\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0person\u00a0p5(<span class=\"string\">&#8220;Tom5&#8221;,24);\u00a0\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0m.insert(make_pair(p3,\u00a0100));<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0m.insert(make_pair(p4,\u00a0100));<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0m.insert(make_pair(p5,\u00a0100));<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0m.insert(make_pair(p1,\u00a0100));<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0m.insert(make_pair(p2,\u00a0100));<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">for(map&lt;person,\u00a0<span class=\"datatypes\">int&gt;::iterator\u00a0iter\u00a0=\u00a0m.begin();\u00a0iter\u00a0!=\u00a0m.end();\u00a0iter++)\u00a0\u00a0<\/span><\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0cout&lt;&lt;iter-&gt;first.name&lt;&lt;<span class=\"string\">&#8220;\\t&#8221;&lt;&lt;iter-&gt;first.age&lt;&lt;endl;\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">return\u00a00;\u00a0\u00a0<\/span><\/li>\n<li>}<\/li>\n<\/ol>\n<\/div>\n<p>&nbsp;<\/p>\n<p>output:<\/p>\n<p>Tom1 \u00a0 \u00a020<br \/>\nTom3 \u00a0 \u00a022<br \/>\nTom4 \u00a0 \u00a023<br \/>\nTom5 \u00a0 \u00a024<\/p>\n<p>&nbsp;<\/p>\n<p>operator&lt;\u7684\u91cd\u8f7d\u4e00\u5b9a\u8981\u5b9a\u4e49\u6210const\u3002\u56e0\u4e3amap\u5185\u90e8\u5b9e\u73b0\u65f6\u8c03\u7528operator&lt;\u7684\u51fd\u6570\u597d\u50cf\u662fconst\u3002<\/p>\n<p>\u7531\u4e8eoperator&lt;\u6bd4\u8f83\u7684\u53ea\u662fage,\u6240\u4ee5\u56e0\u4e3aTom2\u548cTom3\u7684age\u76f8\u540c\uff0c\u6240\u4ee5\u6700\u7ec8\u7ed3\u679c\u91cc\u9762\u53ea\u6709Tom3\uff0c\u6ca1\u6709Tom2<\/p>\n<p>&nbsp;<\/p>\n<p>boost::unordered_map<\/p>\n<p>&nbsp;<\/p>\n<div class=\"dp-highlighter bg_cpp\">\n<div class=\"bar\">\n<div class=\"tools\"><strong>[cpp]<\/strong>\u00a0<a class=\"ViewSource\" title=\"view plain\" href=\"http:\/\/blog.csdn.net\/orzlzro\/article\/details\/7099231\">view plain<\/a><span class=\"tracking-ad\" data-mod=\"popu_168\">\u00a0<a class=\"CopyToClipboard\" title=\"copy\" href=\"http:\/\/blog.csdn.net\/orzlzro\/article\/details\/7099231\">copy<\/a><\/span><\/p>\n<div><\/div>\n<\/div>\n<\/div>\n<ol class=\"dp-cpp\" start=\"1\">\n<li class=\"alt\"><span class=\"preprocessor\">#include&lt;string&gt;\u00a0\u00a0<\/span><\/li>\n<li><span class=\"preprocessor\">#include&lt;iostream&gt;\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\"><\/li>\n<li><span class=\"preprocessor\">#include&lt;boost\/unordered_map.hpp&gt;\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\"><\/li>\n<li><span class=\"keyword\">using\u00a0namespace\u00a0std;\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\"><\/li>\n<li><span class=\"keyword\">struct\u00a0person\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\">{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0string\u00a0name;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int\u00a0age;\u00a0\u00a0<\/span><\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0person(string\u00a0name,\u00a0<span class=\"datatypes\">int\u00a0age)\u00a0\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">this-&gt;name\u00a0=\u00a0\u00a0name;\u00a0\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">this-&gt;age\u00a0=\u00a0age;\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">bool\u00a0operator==\u00a0(<span class=\"keyword\">const\u00a0person&amp;\u00a0p)\u00a0const\u00a0\u00a0<\/span><\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">return\u00a0name==p.name\u00a0&amp;&amp;\u00a0age==p.age;\u00a0\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li class=\"alt\">};<\/li>\n<li><\/li>\n<li class=\"alt\"><span class=\"datatypes\">size_t\u00a0hash_value(<span class=\"keyword\">const\u00a0person&amp;\u00a0p)\u00a0\u00a0<\/span><\/span><\/li>\n<li>{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">size_t\u00a0seed\u00a0=\u00a00;\u00a0\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0boost::hash_combine(seed,\u00a0boost::hash_value(p.name));<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0boost::hash_combine(seed,\u00a0boost::hash_value(p.age));<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">return\u00a0seed;\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\">}<\/li>\n<li><\/li>\n<li class=\"alt\"><span class=\"datatypes\">int\u00a0main()\u00a0\u00a0<\/span><\/li>\n<li>{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">typedef\u00a0boost::unordered_map&lt;person,<span class=\"datatypes\">int&gt;\u00a0umap;\u00a0\u00a0<\/span><\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0umap\u00a0m;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0person\u00a0p1(<span class=\"string\">&#8220;Tom1&#8221;,20);\u00a0\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0person\u00a0p2(<span class=\"string\">&#8220;Tom2&#8221;,22);\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0person\u00a0p3(<span class=\"string\">&#8220;Tom3&#8221;,22);\u00a0\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0person\u00a0p4(<span class=\"string\">&#8220;Tom4&#8221;,23);\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0person\u00a0p5(<span class=\"string\">&#8220;Tom5&#8221;,24);\u00a0\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0m.insert(umap::value_type(p3,\u00a0100));<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0m.insert(umap::value_type(p4,\u00a0100));<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0m.insert(umap::value_type(p5,\u00a0100));<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0m.insert(umap::value_type(p1,\u00a0100));<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0m.insert(umap::value_type(p2,\u00a0100));<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">for(umap::iterator\u00a0iter\u00a0=\u00a0m.begin();\u00a0iter\u00a0!=\u00a0m.end();\u00a0iter++)\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0cout&lt;&lt;iter-&gt;first.name&lt;&lt;<span class=\"string\">&#8220;\\t&#8221;&lt;&lt;iter-&gt;first.age&lt;&lt;endl;\u00a0\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">return\u00a00;\u00a0\u00a0<\/span><\/li>\n<li>}<\/li>\n<\/ol>\n<\/div>\n<p>\u8f93\u51fa<\/p>\n<p>&nbsp;<\/p>\n<p>Tom1 \u00a0 \u00a020<br \/>\nTom5 \u00a0 \u00a024<br \/>\nTom4 \u00a0 \u00a023<br \/>\nTom2 \u00a0 \u00a022<br \/>\nTom3 \u00a0 \u00a022<\/p>\n<p>&nbsp;<\/p>\n<p>\u5fc5\u987b\u8981\u81ea\u5b9a\u4e49operator==\u548chash_value\u3002 \u91cd\u8f7doperator==\u662f\u56e0\u4e3a\uff0c\u5982\u679c\u4e24\u4e2a\u5143\u7d20\u7684hash_value\u7684\u503c\u76f8\u540c\uff0c\u5e76\u4e0d\u80fd\u65ad\u5b9a\u8fd9\u4e24\u4e2a\u5143\u7d20\u5c31\u76f8\u540c\uff0c\u5fc5\u987b\u518d\u8c03\u7528operator==\u3002 \u5f53\u7136\uff0c\u5982\u679chash_value\u7684\u503c\u4e0d\u540c\uff0c\u5c31\u4e0d\u9700\u8981\u8c03\u7528operator==\u4e86\u3002<\/p>\n<\/div>\n<div id=\"MySignature\">C\/C++\u57fa\u672c\u8bed\u6cd5\u5b66\u4e60 STL C++ primer<\/div>\n<div class=\"clear\"><\/div>\n<div id=\"blog_post_info_block\"><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>map\u4ecb\u7ecd Map\u662fSTL[1]\u7684\u4e00\u4e2a\u5173<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[],"tags":[118],"class_list":["post-1213","post","type-post","status-publish","format-standard","hentry","tag-02-"],"_links":{"self":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/1213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/comments?post=1213"}],"version-history":[{"count":0,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/1213\/revisions"}],"wp:attachment":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/media?parent=1213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/categories?post=1213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/tags?post=1213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}