青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

今天看到 boost::unordered_map, 它與 stl::map的區(qū)別就是,stl::map是按照operator<比較判斷元素是否相同,以及比較元素的大小,然后選擇合適的位置插入到樹中。所以,如果對(duì)map進(jìn)行遍歷(中序遍歷)的話,輸出的結(jié)果是有序的。順序就是按照operator< 定義的大小排序。

而boost::unordered_map是計(jì)算元素的Hash值,根據(jù)Hash值判斷元素是否相同。所以,對(duì)unordered_map進(jìn)行遍歷,結(jié)果是無序的。


用法的區(qū)別就是,stl::map 的key需要定義operator< 。 而boost::unordered_map需要定義hash_value函數(shù)并且重載operator==。對(duì)于內(nèi)置類型,如string,這些都不用操心。對(duì)于自定義的類型做key,就需要自己重載operator< 或者h(yuǎn)ash_value()了。


最后,說,當(dāng)不需要結(jié)果排好序時(shí),最好用unordered_map。


其實(shí),stl::map對(duì)于與java中的TreeMap,而boost::unordered_map對(duì)應(yīng)于java中的HashMap。


stl::map

  1. #include<string>
  2. #include<iostream>
  3. #include<map>
  4. using namespace std;
  5. struct person
  6. {
  7. string name;
  8. int age;
  9. person(string name, int age)
  10. {
  11. this->name = name;
  12. this->age = age;
  13. }
  14. bool operator < (const person& p) const
  15. {
  16. return this->age < p.age;
  17. }
  18. };
  19. map<person,int> m;
  20. int main()
  21. {
  22. person p1("Tom1",20);
  23. person p2("Tom2",22);
  24. person p3("Tom3",22);
  25. person p4("Tom4",23);
  26. person p5("Tom5",24);
  27. m.insert(make_pair(p3, 100));
  28. m.insert(make_pair(p4, 100));
  29. m.insert(make_pair(p5, 100));
  30. m.insert(make_pair(p1, 100));
  31. m.insert(make_pair(p2, 100));
  32. for(map<person, int>::iterator iter = m.begin(); iter != m.end(); iter++)
  33. {
  34. cout<<iter->first.name<<"\t"<<iter->first.age<<endl;
  35. }
  36. return 0;
  37. }

 

output:

Tom1 20
Tom3 22
Tom4 23
Tom5 24


operator<的重載一定要定義成const。因?yàn)閙ap內(nèi)部實(shí)現(xiàn)時(shí)調(diào)用operator<的函數(shù)好像是const。

由于operator<比較的只是age,所以因?yàn)門om2和Tom3的age相同,所以最終結(jié)果里面只有Tom3,沒有Tom2


boost::unordered_map

  1. #include<string>
  2. #include<iostream>
  3. #include<boost/unordered_map.hpp>
  4. using namespace std;
  5. struct person
  6. {
  7. string name;
  8. int age;
  9. person(string name, int age)
  10. {
  11. this->name = name;
  12. this->age = age;
  13. }
  14. bool operator== (const person& p) const
  15. {
  16. return name==p.name && age==p.age;
  17. }
  18. };
  19. size_t hash_value(const person& p)
  20. {
  21. size_t seed = 0;
  22. boost::hash_combine(seed, boost::hash_value(p.name));
  23. boost::hash_combine(seed, boost::hash_value(p.age));
  24. return seed;
  25. }
  26. int main()
  27. {
  28. typedef boost::unordered_map<person,int> umap;
  29. umap m;
  30. person p1("Tom1",20);
  31. person p2("Tom2",22);
  32. person p3("Tom3",22);
  33. person p4("Tom4",23);
  34. person p5("Tom5",24);
  35. m.insert(umap::value_type(p3, 100));
  36. m.insert(umap::value_type(p4, 100));
  37. m.insert(umap::value_type(p5, 100));
  38. m.insert(umap::value_type(p1, 100));
  39. m.insert(umap::value_type(p2, 100));
  40. for(umap::iterator iter = m.begin(); iter != m.end(); iter++)
  41. {
  42. cout<<iter->first.name<<"\t"<<iter->first.age<<endl;
  43. }
  44. return 0;
  45. }

輸出

 

Tom1 20
Tom5 24
Tom4 23
Tom2 22
Tom3 22


必須要自定義operator==和hash_value。 重載operator==是因?yàn)椋绻麅蓚€(gè)元素的hash_value的值相同,并不能斷定這兩個(gè)元素就相同,必須再調(diào)用operator==。 當(dāng)然,如果hash_value的值不同,就不需要調(diào)用operator==了。


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品久久久久久av下载红粉| 欧美日韩美女一区二区| 麻豆精品精华液| 午夜在线精品偷拍| 午夜精品久久久久久久久久久| 在线亚洲成人| 日韩一区二区电影网| 日韩视频在线一区二区三区| 日韩视频在线免费观看| 亚洲一级在线观看| 久久成年人视频| 另类图片国产| 亚洲欧洲久久| 亚洲人成人一区二区三区| 在线视频欧美日韩| 午夜精品久久久久久99热软件| 久久精品视频在线播放| 欧美精品国产| 国外成人在线视频| 亚洲久久成人| 久久福利资源站| 亚洲日本成人| 久久精品国内一区二区三区| 欧美精品1区2区| 国产一区二区三区在线观看视频| 亚洲夫妻自拍| 午夜视频在线观看一区| 欧美大片va欧美在线播放| 99精品国产高清一区二区| 久久久久一区二区三区| 欧美系列一区| 亚洲欧洲日产国产网站| 久久久999| 日韩午夜av电影| 久热精品视频在线| 国产区二精品视| 亚洲综合精品| 亚洲精品一区久久久久久| 久久久欧美一区二区| 国产精品视频观看| 亚洲午夜女主播在线直播| 欧美高清自拍一区| 久久久精品2019中文字幕神马| 欧美日韩免费精品| 亚洲精品久久嫩草网站秘色 | 韩国美女久久| 国产精品永久免费观看| 激情视频一区| 欧美一区二粉嫩精品国产一线天| 亚洲精品国产欧美| 嫩草影视亚洲| 亚洲精品乱码久久久久久久久 | av72成人在线| 欧美欧美在线| av成人福利| 亚洲韩日在线| 欧美了一区在线观看| 亚洲美女av网站| 91久久久亚洲精品| 欧美精品成人| 亚洲女同同性videoxma| 亚洲性xxxx| 国产欧美亚洲日本| 久久久久久久精| 久久婷婷激情| 亚洲人成网站色ww在线| 亚洲美女电影在线| 欧美午夜一区| 久久精品在线视频| 久久在精品线影院精品国产| 亚洲动漫精品| 亚洲欧洲日韩综合二区| 欧美日韩中字| 久久国产福利国产秒拍| 久久久精品国产免大香伊| 依依成人综合视频| 亚洲电影免费在线观看| 欧美日韩一视频区二区| 午夜精品在线观看| 久久精品国产69国产精品亚洲| 在线免费高清一区二区三区| 亚洲福利一区| 国产欧美韩国高清| 欧美激情麻豆| 国产欧美日本一区视频| 免费毛片一区二区三区久久久| 欧美成人一区二区三区在线观看 | 亚洲黄色影院| 亚洲桃花岛网站| 精品成人国产| 亚洲精品久久久一区二区三区| 国产精品入口尤物| 久久在线免费观看视频| 欧美日韩不卡在线| 久久久青草青青国产亚洲免观| 欧美高清在线观看| 欧美专区18| 欧美剧在线免费观看网站| 久久久国产精品一区二区中文| 欧美成人精品1314www| 欧美一区二区三区在| 欧美韩国日本一区| 一本色道综合亚洲| 影音先锋久久精品| 欧美激情中文字幕在线| 国产精品理论片| 亚洲国产日韩一区| 尤物九九久久国产精品的特点| 在线视频欧美日韩| 日韩亚洲国产欧美| 久久深夜福利免费观看| 亚洲欧美视频在线观看视频| 美女脱光内衣内裤视频久久网站| 欧美一区二区高清| 欧美三级在线视频| 亚洲高清在线视频| 亚洲大胆人体视频| 久久精品久久综合| 久久激情一区| 国产欧美精品xxxx另类| 亚洲一区在线观看视频| 亚洲天堂成人| 欧美日韩一区三区| 亚洲免费久久| 中日韩男男gay无套| 欧美韩国在线| 亚洲电影免费观看高清完整版在线| 红桃视频一区| 久久久xxx| 老司机aⅴ在线精品导航| 国产亚洲欧美另类一区二区三区| 亚洲一区中文字幕在线观看| 亚洲一级一区| 国产精品视频网站| 亚洲——在线| 久久久久久久一区| 精久久久久久久久久久| 久久久久网址| 亚洲第一黄色| 亚洲三级影片| 欧美日韩国产一级| 欧美日韩在线观看一区二区三区 | 欧美另类高清视频在线| 欧美激情a∨在线视频播放| 在线看片欧美| 欧美激情一区二区三区全黄| 亚洲精品日韩激情在线电影 | 亚洲国产精品小视频| 老司机一区二区三区| 亚洲国产精品传媒在线观看| 日韩视频一区二区三区| 欧美日韩综合网| 欧美一级理论片| 欧美福利在线观看| 在线一区二区三区做爰视频网站 | 欧美国产精品久久| 一区二区三区黄色| 久久久成人精品| 亚洲精品视频在线观看免费| 欧美日韩国产123| 午夜视频在线观看一区| 男女激情久久| 亚洲一区三区电影在线观看| 国产欧美在线| 亚洲一区日本| 欧美激情视频在线播放 | 亚洲欧美999| 狠久久av成人天堂| 欧美日韩高清在线播放| 久久国产欧美精品| 亚洲精品色婷婷福利天堂| 小处雏高清一区二区三区| 国产主播精品| 欧美日韩成人综合天天影院| 午夜视频在线观看一区二区三区 | 久久久久久久久久久一区| 日韩一级精品| 国内精品视频一区| 欧美日韩午夜精品| 久久一区激情| 亚洲欧美经典视频| 亚洲国产精品va在线看黑人| 亚洲欧美日韩精品综合在线观看| 在线视频观看日韩| 国产精品美女久久久| 欧美成人一区二区三区| 午夜精品久久久久影视| 日韩亚洲成人av在线| 免费欧美在线视频| 久久国产精品亚洲va麻豆| 中文国产成人精品| 亚洲欧洲在线看| 在线欧美日韩精品| 国产亚洲欧美日韩美女| 欧美午夜一区二区| 国产精品xxxav免费视频| 欧美理论在线| 欧美精品 日韩| 欧美激情国产日韩精品一区18| 久久亚洲国产成人|