城市直播房产教育博客汽车
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

深度C遍历unorderedmap顺序问题

8月4日 风雨峰投稿
  说明
  unorderedmap是关联容器,含有带唯一键的键值对。搜索、插入和元素移除拥有平均常数时间复杂度。元素在内部不以任何特定顺序排序,而是组织进桶中。元素放进哪个桶完全依赖于其键的哈希。这允许对单独元素的快速访问,因为一旦计算哈希,则它准确指代元素所放进的桶。问题
  原系统基于GCC4。8。5,使用C11标准开发,内部基于unorderedmap存储数据,新系统先在升级GCC为7。3。0,仍然使用C11标准开发。新旧系统都基于一份持久化文件恢复数据,并按照同一顺序插入unorderedmap,并遍历unorderedmap组包对外发送,通过对比新旧系统对外发包内容一致性,来验证新旧系统的正确性。
  但验证的现象是新旧系统发包顺序不一致。原因分析哈希策略在不同GCC版本中有变化,插入时rehash时机不一样了(primelist不同)
  初始桶的大小不一样,GCC4。8。5有默认值10,之后的版本取消了默认值
  根本原因:初始桶大小和每次插入时桶大小要保持一致解决方案替换GCC7。3。0里的哈希策略为GCC4。8。5的(标准库生成是弱符号,使用stub。cpp强符号替换)stub。cppincludeutilityincludecstddefincludenamespacestd{namespacedetail{externconstunsignedlongprimelist〔〕2561or256481{2ul,3ul,5ul,7ul,11ul,13ul,17ul,19ul,23ul,29ul,31ul,37ul,41ul,43ul,47ul,53ul,59ul,61ul,67ul,71ul,73ul,79ul,83ul,89ul,97ul,103ul,109ul,113ul,127ul,137ul,139ul,149ul,157ul,167ul,179ul,193ul,199ul,211ul,227ul,241ul,257ul,277ul,293ul,313ul,337ul,359ul,383ul,409ul,439ul,467ul,503ul,541ul,577ul,619ul,661ul,709ul,761ul,823ul,887ul,953ul,1031ul,1109ul,1193ul,1289ul,1381ul,1493ul,1613ul,1741ul,1879ul,2029ul,2179ul,2357ul,2549ul,2753ul,2971ul,3209ul,3469ul,3739ul,4027ul,4349ul,4703ul,5087ul,5503ul,5953ul,6427ul,6949ul,7517ul,8123ul,8783ul,9497ul,10273ul,11113ul,12011ul,12983ul,14033ul,15173ul,16411ul,17749ul,19183ul,20753ul,22447ul,24281ul,26267ul,28411ul,30727ul,33223ul,35933ul,38873ul,42043ul,45481ul,49201ul,53201ul,57557ul,62233ul,67307ul,72817ul,78779ul,85229ul,92203ul,99733ul,107897ul,116731ul,126271ul,136607ul,147793ul,159871ul,172933ul,187091ul,202409ul,218971ul,236897ul,256279ul,277261ul,299951ul,324503ul,351061ul,379787ul,410857ul,444487ul,480881ul,520241ul,562841ul,608903ul,658753ul,712697ul,771049ul,834181ul,902483ul,976369ul,1056323ul,1142821ul,1236397ul,1337629ul,1447153ul,1565659ul,1693859ul,1832561ul,1982627ul,2144977ul,2320627ul,2510653ul,2716249ul,2938679ul,3179303ul,3439651ul,3721303ul,4026031ul,4355707ul,4712381ul,5098259ul,5515729ul,5967347ul,6456007ul,6984629ul,7556579ul,8175383ul,8844859ul,9569143ul,10352717ul,11200489ul,12117689ul,13109983ul,14183539ul,15345007ul,16601593ul,17961079ul,19431899ul,21023161ul,22744717ul,24607243ul,26622317ul,28802401ul,31160981ul,33712729ul,36473443ul,39460231ul,42691603ul,46187573ul,49969847ul,54061849ul,58488943ul,63278561ul,68460391ul,74066549ul,80131819ul,86693767ul,93793069ul,101473717ul,109783337ul,118773397ul,128499677ul,139022417ul,150406843ul,162723577ul,176048909ul,190465427ul,206062531ul,222936881ul,241193053ul,260944219ul,282312799ul,305431229ul,330442829ul,357502601ul,386778277ul,418451333ul,452718089ul,489790921ul,529899637ul,573292817ul,620239453ul,671030513ul,725980837ul,785430967ul,849749479ul,919334987ul,994618837ul,1076067617ul,1164186217ul,1259520799ul,1362662261ul,1474249943ul,1594975441ul,1725587117ul,1866894511ul,2019773507ul,2185171673ul,2364114217ul,2557710269ul,2767159799ul,2993761039ul,3238918481ul,3504151727ul,3791104843ul,4101556399ul,4294967291ul,Sentinel,sowedonthavetotesttheresultoflowerbound,or,on64bitmachines,restofthetable。ifSIZEOFLONG!84294967291ulelse6442450933ul,8589934583ul,12884901857ul,17179869143ul,25769803693ul,34359738337ul,51539607367ul,68719476731ul,103079215087ul,137438953447ul,206158430123ul,274877906899ul,412316860387ul,549755813881ul,824633720731ul,1099511627689ul,1649267441579ul,2199023255531ul,3298534883309ul,4398046511093ul,6597069766607ul,8796093022151ul,13194139533241ul,17592186044399ul,26388279066581ul,35184372088777ul,52776558133177ul,70368744177643ul,105553116266399ul,140737488355213ul,211106232532861ul,281474976710597ul,562949953421231ul,1125899906842597ul,2251799813685119ul,4503599627370449ul,9007199254740881ul,18014398509481951ul,36028797018963913ul,72057594037927931ul,144115188075855859ul,288230376151711717ul,576460752303423433ul,1152921504606846883ul,2305843009213693951ul,4611686018427387847ul,9223372036854775783ul,18446744073709551557ul,18446744073709551557ulendif};Defaultvalueforrehashpolicy。Bucketsizeis(usually)thesmallestprimethatkeepstheloadfactorsmallenough。structPrimerehashpolicy{Primerehashpolicy(floatz1。0);floatmaxloadfactor()Returnabucketsizenosmallerthann。std::sizetMnextbkt(std::sizetn)Returnabucketcountappropriatefornelementsstd::sizetMbktforelements(std::sizetn)nbktiscurrentbucketcount,neltiscurrentelementcount,andninsisnumberofelementstobeinserted。Doweneedtoincreasebucketcount?Ifso,returnmakepair(true,n),wherenisthenewbucketcount。Ifnot,returnmakepair(false,0)。std::pairbool,std::sizetMneedrehash(std::sizetnbkt,std::sizetnelt,std::sizetnins)typedefstd::sizetSStateMstate()voidMreset(Statestate);enum{Snprimessizeof(unsignedlong)!8?256:25648};staticconststd::sizetSgrowthfactor2;floatMmutablestd::sizetM};Primerehashpolicy::Primerehashpolicy(floatz):Mmaxloadfactor(z),Mnextresize(0){}floatPrimerehashpolicy::maxloadfactor()constnoexcept{returnM}std::sizetPrimerehashpolicy::Mbktforelements(std::sizetn)const{returnbuiltinceil(n(longdouble)Mmaxloadfactor);}Primerehashpolicy::StatePrimerehashpolicy::Mstate()const{returnM}voidPrimerehashpolicy::Mreset(Statestate){M}Returnaprimenosmallerthann。std::sizetPrimerehashpolicy::Mnextbkt(std::sizetn)const{Optimizelookupsinvolvingthefirstelementsofprimelist。(usefultospeedup,eg,constructors)staticconstunsignedcharfastbkt〔12〕{2,2,2,3,5,5,7,7,11,11,11,11};if(n11){Mnextresizebuiltinceil(fastbkt〔n〕(longdouble)Mmaxloadfactor);returnfastbkt〔n〕;}constunsignedlongnextbktstd::lowerbound(primelist5,primelistSnprimes,n);Mnextresizebuiltinceil(nextbkt(longdouble)Mmaxloadfactor);}Findsthesmallestprimepsuchthatalphapneltnins。Ifpnbkt,returnmakepair(true,p);otherwisereturnmakepair(false,0)。InprinciplethisisntverydifferentfromMbktforelements。Theonlytrickypartisthatwerecachingtheelementcountatwhichweneedtorehash,sowedonthavetodoafloatingpointmultiplyforeveryinsertion。std::pairbool,std::sizetPrimerehashpolicy::Mneedrehash(std::sizetnbkt,std::sizetnelt,std::sizetnins)const{if(neltninsMnextresize){longdoubleminbkts(neltnins)(longdouble)Mif(minbktsnbkt)returnstd::makepair(true,Mnextbkt(std::maxstd::sizet(builtinfloor(minbkts)1,nbktSgrowthfactor)));Mnextresizebuiltinfloor(nbkt(longdouble)Mmaxloadfactor);returnstd::makepair(false,0);}elsereturnstd::makepair(false,0);}}namespacedetail}namespacestd设置GCC7。3。0初始桶大小为10includeiostreamincludestringincludeunorderedmapintmain(){创建三个string的unorderedmap(映射到string)std::unorderedmapstd::string,std::u。reserve(10);std::coutloadfactor:u。loadfactor()std::std::coutmaxloadfactor:u。maxloadfactor()std::std::coutbucketcount:u。bucketcount()std::std::coutsize:u。size()std::boolwillrehash(u。maxloadfactor()u。bucketcount())(u。size()1);std::coutwillrehash:willrehashstd::for(inti0;i10;i){u。insert({std::tostring(i),std::tostring(i)});}迭代并打印unorderedmap的关键和值for(constauton:u){std::coutKey:〔n。first〕Value:〔n。second〕;}std::coutloadfactor:u。loadfactor()std::std::coutmaxloadfactor:u。maxloadfactor()std::std::coutbucketcount:u。bucketcount()std::std::coutsize:u。size()std::willrehash(u。maxloadfactor()u。bucketcount())(u。size()1);std::coutwillrehash:willrehashstd::return0;}CMakeLists。txtproject(unorderedmap)cmakeminimumrequired(VERSION3。5)addexecutable(theexecutablestub。cppmain。cpp)targetlinklibraries(theexecutableum)验证
  在线验证https:godbolt。orgzx3v36YaKc
投诉 评论 转载

CBA两大消息广东队马尚状态很好,又一名主教练下课cba最新三大消息广东队的外援马尚布鲁克斯晒出了自己在训练的一个照片可以看得出来目前马尚布鲁克斯状态非常好,并没有受伤病影响,对于它的一个实力处于下滑的一个状态。夏天,马上布鲁……露酒就是保健酒吗?(附露酒可用药食同源目录)随着酒类消费理性地回归,消费者饮酒越来越注重健康和养生保健。喝好一点,喝少一点,喝健康一点的理念不断深入人心。起源于商,盛行于唐,拥有几千年历史,以药食同源为理论,具有养生功效……无奇不有!僵尸蚁真菌也被寄生,一种白色真菌竟长在僵尸蚁真菌上这个世界真是无奇不有,一种奇怪的真菌寄生在蚂蚁体内,操控蚂蚁让蚂蚁变成僵尸蚁,但是现在,科学家发现僵尸蚁真菌也会被寄生,一种白色的真菌竟长在僵尸蚁真菌上,这真是螳螂捕蝉,黄雀在……深度C遍历unorderedmap顺序问题说明unorderedmap是关联容器,含有带唯一键的键值对。搜索、插入和元素移除拥有平均常数时间复杂度。元素在内部不以任何特定顺序排序,而是组织进桶中。元素放进哪个桶完……缓缴社保为企业减负近日,四部门联合发布通知,明确自2022年9月起,各省、自治区、直辖市及新疆生产建设兵团可根据本地区受疫情影响情况和社会保险基金状况,进一步扩大缓缴政策实施范围,覆盖本地区所有……刷新行业速度AITO问界M7即将迎来交付AITO问界M7是赛力斯汽车与华为联合设计的豪华智慧大型电动SUV,自上市后受到了市场的广泛关注与认可。据悉,8月24日起,问界M7将开启全国规模化的多城交付。6座大空间……孩子牙齿黑黑的,长虫牙,牙痛可以不用处理家长:医生,我娃儿牙齿上有个洞,说牙齿痛,我想给他拿点吃药医生:我先给他检查一下医生:小朋友这个是长虫牙穿髓引起的牙髓炎,吃药可以暂时止疼,但治标不治本,我建议做根……金属铝,一年中哪个月最容易涨价?作者:归依佛归依法归依僧笔者通过对铝的历史数据做统计,统计时间段为自金属铝上市以来至2021年年中,数据来源于价格指数,通过观察统计中的数据,得到如下规律性现象:概……解码海派新乡村机场盘活浦东祝桥资源产业联动摸索发展新思路中新网上海10月30日电(谢梦圆郁玫)祝桥镇,上海浦东国际机场的所在地,被外界誉为浦东版的虹桥枢纽,此处因机场而兴,近年来祝桥镇不断摸索,将自身的航空城区域属性与产业进行连接互……非匿名指令公测礼包码游戏玩法攻略回答《非匿名指令》是一款二次元画风的回合制卡牌对战游戏,融合了传统的回合制对战和小队搭配的玩法,角色主要通过抽卡来进行获取。进入游戏后,首先区分这个角色所属的阵营,因为很多人……科学家们在南极洲下发现了一些深不可测的巨大生物气候变化目前对南极洲的冰架构成了巨大的风险,这只会推动该地区的研究越来越多,这是有充分理由的。现在,一群在地球最南端工作的科学家发现了南极洲下有巨大生命的东西。根据发表在……怎么穿都好看的穿衣公式!秋冬衬衫叠穿必看叠穿法则最近发的打底衫选款大家看了么?刚啃完一块硬骨头,留言区又看到有姐妹提名想看秋冬衬衫,丁丁马上带着干货来了!今天这篇我们先聊怎么选款搭配,衬衫店铺推荐下次再来……
新周期新挑战,对手越来越强,国乒男队或面临关键比赛需打满五盘微软想吃掉奈飞?真不是为了刷剧丁俊晖罕见晒家庭照,妻子害羞躲避镜头,颜值身材不输潘晓婷李易峰嫖娼影响大!杨幂出轨谣言被重提,冯小刚等众多男星也遭殃华为mate50系列即将发布,配置已基本曝光以热缩材料起家,沃尔核材布局4大领域,新业务进入高速发展期他们喜欢的是冠军,而并非是运动本身腾讯半年关停十余款产品?巨头腾讯为啥着急断舍离?调皮!孙颖莎抱着奖杯,丢下王楚钦就走,大头有点尴尬首发移动光追开放平台,全球开发者共享,手游光追时代要来了吗?卿卿日常无恶不作的尹嵩,招惹郝葭,或是他最大的报应吃鸡特权卡出现重大漏洞,可无限6折买荣耀勋章,抓紧时间
仪器仪表巨头并购扩大势力,盘点2021年第一季收购案例皂基洗面奶为什么假滑?新课标高二语文暑假作业及答案秋雨高中作文六月的毕业季优美句子你只有10分钟雄鹿太脏?杜兰特直指马修斯恶意犯规布朗回应被米德尔顿撂倒区县事业单位分类工作的几点思考深圳小升初四大入学途径第一次坐过山车作文400字如何看懂生肖和八字我就是这般女子谢启临的结局是什么谢启临喜欢班婳吗

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁