在下列情况下,我可以避免在C ++中复制unordered_map吗?

时间:2017-02-06 22:17:23

标签: c++ algorithm memory memory-management unordered-map

上下文

我正在尝试使用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使用的我不会再使用了吗?

非常感谢任何帮助!谢谢!

- 随意编辑标题,使其更具描述性。我找不到一个好头衔。

1 个答案:

答案 0 :(得分:5)

最佳行动方案是使用标准功能。使用std容器时,使用 std :: move std :: swap 可能是解决问题的好方法。