我正在尝试使用C ++的动态编程算法来解决旅行商问题。我正在尝试解决25个城市的问题,这意味着我必须在unordered_map
每次迭代中存储 500万个键值对。
将此算法与Python和4GB内存一起使用,由于内存不足导致我的进程被终止,所以我正试图改善内存中的性能。
为了减少使用的内存量,我试图保留两个unordered_set
,一个具有上一次迭代的值,另一个具有新值。
std::unordered_map<std::string, int> costs;
std::unordered_map<std::string, int> new_costs;
for (int m = 1; m <= n; m++) {
new_costs.clear();
while (something) {
// I build the content of new_costs based on the content of costs
}
// Here I want to make costs point to new_costs and free new_costs to
// build the next iteration
costs = new_costs; // ??
}
我不知道是否可以避免将所有new_costs
复制到costs
,因为我们正在谈论数百万元素。
我想知道我是否可以使用指针使costs
指向new_costs
,但在这种情况下,我不知道当new_costs.clear();
时会发生什么。
总结我的问题是,我如何为new_costs
分配新内存,将new_costs
的内容放在costs
内(希望在恒定时间内?),并释放内存旧costs
使用的我不会再使用了吗?
非常感谢任何帮助!谢谢!
- 随意编辑标题,使其更具描述性。我找不到一个好头衔。
答案 0 :(得分:5)
最佳行动方案是使用标准功能。使用std容器时,使用 std :: move 或 std :: swap 可能是解决问题的好方法。