gpt4 book ai didi

c++ - 不再删除 std::map 的已用内容

转载 作者:行者123 更新时间:2023-11-28 00:18:48 25 4
gpt4 key购买 nike

我有一个 std::map<int64_t, int64_t> foo; ..它每天被喂入 XX 对(未定义,它们可能是 1 或 1000)。
为了减少内存使用,我不想删除 map 中更多有用的元素。我这样做了:

    map<int64_t, int64_t> tmpMap;
// Copy into a new temporary map only elements to keep
for (map<int64_t, int64_t>::iterator it = foo.begin(); it != foo.end(); ++it)
{
// the condition decides whether a pair is still useful or not
if ([...])
{
pair<int64_t, int64_t> tmpPair(it->first, it->second);
tmpMap.insert(tmpPair);
}
}
// Clear the main map
foo.clear();
// Copy tmpMap (which contains only useful elements) into the main map
foo.insert(tmpMap.begin(), tmpMap.end());
tmpMap.clear();

关于如何在资源使用方面以更好的方式实现我的目标的任何建议,考虑到 foo可能有 500/600 对 int64_t 并且每次调用这些行 foo吃饱了吗?

谢谢(对不起我的英语)

最佳答案

不需要创建临时的;只需遍历 std::map 并有条件地调用 std::map::erase。这是一个例子:

std::map<int,int> my_map {{1, 2}, {2, 3}, {3, 4}};
std::cout << my_map.size() << std::endl; // 3
auto begin = std::begin(my_map);
while (begin != std::end(my_map)) {
if (begin->first == 2) {
begin = my_map.erase(begin); // C++11
} else {
++begin;
}
}
std::cout << my_map.size() << std::endl; // 2

关于c++ - 不再删除 std::map 的已用内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28626587/

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