我必须找到一个有效的解决方案来解决这个问题。我有两张地图。我必须将一些元素从map1移动到map2(即从map1删除并放入map2)。
我有一些键,通过它们我可以找到 map1 中的元素,即我现在正在做的事情:
bool temp;
temp = map1[key1];
map2[key1]=temp;
map1.erase(key1)
我为每个键执行此操作(循环中)
我的问题是是否有更便宜的解决方案
(我使用C++11编译器)
理想的解决方案只有通过 C++17 才成为可能:地图::提取()
std::map 通常被实现为二叉树,
二叉树为每个内存对象存储一个键值条目。
这样就可以通过简单地交换该内存块的所有权来移动条目。
这是通过仅翻转一些内部指针来完成的(包括重新平衡两棵树,如果最终结果是更改两棵树,则无论如何都必须完成)。
这不仅避免了在内存中移动对象,还避免了任何内存分配和释放(这具有不可预测的最坏情况性能)。
Example:
// Before Darwin, it was thought that whales were fish.
std::map<int, std::string> fish{{1,"whaleshark"}, {2,"whale"}, {3,"shark"}};
std::map<int, std::string> mammalia{{1,"cat"}, {2,"dog"}};
// Oops, the whale belongs to mammalia.
auto whale = fish.extract(2);
whale.key() = 3;
mammalia.insert(std::move(whale));
在 C++17 之前,您必须实现自己的映射才能执行此操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)