gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:45 27 4
gpt4 key购买 nike

上下文

我正在尝试使用 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 已经使用的内存?

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

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

最佳答案

最好的做法是使用标准函数。当您使用 std 容器时,使用 std::movestd::swap 可能是解决您的问题的好方法。

关于c++ - 在以下情况下,我可以避免在 C++ 中复制 unordered_map 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42078292/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com