如何在复制std::unordered_map时保留其元素顺序?
如何在复制std::unordered_map时保留其元素顺序?
嗨,我知道std::unordered_map这货听名字就对元素顺序没什么严格承诺,但它总得守点基本规矩才能正常干活儿对吧?
就拿它的erase操作来说,还有曾经讨论过的一个标准议题里都能看出来:当你复制一个std::unordered_map的时候,复制出来的容器里元素的遍历顺序必须和原容器一模一样。这可不是随口扯的,这是标准里隐含的硬性要求,不然很多基础功能都要乱套。
你琢磨琢磨,如果复制完顺序变了,那原容器和副本的equal_range结果可能就对不上,连迭代器的行为都会出问题。标准虽然没明明白白写着“顺序必须保留”,但从它对容器一致性的要求能顺理成章推出来:复制操作就是要完完全全复刻原容器的状态,包括遍历顺序在内。
不过有个事儿得提醒你:这仅仅是复制的瞬间会保留顺序,要是你之后给副本插新元素、删旧元素,那顺序可就不一定了——毕竟它本质还是“无序”容器,只有在完全复制这种场景下,才会跟原容器的顺序保持一致。
备注:内容来源于stack exchange,提问作者lewis
相关产品推荐
相关产品推荐

