stl::map与boost::unorder_map的区别
2018-06-17 23:02:00来源:未知 阅读 ()
stl中的map基于红黑树实现,并且在insert元素的时候,通过operator<来比较元素以及找到可以插入元素的位置,因此最终遍历结果有序。
而boost中unorder_map是基于哈希值来比较元素的,有的元素可能哈希值相同但元素不同,因此需要先定义hash_value函数以及operator==。因此遍历unorder_map的结果是无序的。
#include<string> #include<iostream> #include<map> #include<stdio.h> #include<boost/unordered_map.hpp> using namespace std; struct person { string name; int age; person(string name, int age) { this->name = name; this->age = age; } bool operator < (const person& p) const { return this->age < p.age; } bool operator== (const person& p) const { return name==p.name && age==p.age; } }; size_t hash_value(const person& p) { size_t seed = 0; boost::hash_combine(seed, boost::hash_value(p.name)); boost::hash_combine(seed, boost::hash_value(p.age)); return seed; } map<person,int> m; boost::unordered_map<person,int> um; int main() { person p1("p1",20); person p2("p2",22); person p3("p3",22); person p4("p4",23); person p5("p5",24); m.insert(make_pair(p3, 100)); m.insert(make_pair(p4, 100)); m.insert(make_pair(p5, 100)); m.insert(make_pair(p1, 100)); m.insert(make_pair(p2, 100)); um.insert(make_pair(p3, 100)); um.insert(make_pair(p4, 100)); um.insert(make_pair(p5, 100)); um.insert(make_pair(p1, 100)); um.insert(make_pair(p2, 100)); for(map<person, int>::iterator iter = m.begin(); iter != m.end(); iter++) { cout<<iter->first.name<<"\t"<<iter->first.age<<endl; } cout<<endl; for(boost::unordered_map<person, int>::iterator iter = um.begin(); iter != um.end(); iter++) { cout<<iter->first.name<<"\t"<<iter->first.age<<endl; } cout<<(m.find(p3)!=m.end())<<endl; return 0; }
output:
p1 20
p3 22
p4 23
p5 24
p3 22
p1 20
p5 24
p4 23
p2 22
0
stl::map中p2与p3的age相同导致p2找不到插入位置,最终map里没有p2这个人。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:1010 过河卒
下一篇:1220 数字三角形
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash