迭代一组和擦除元素

Iterating over a set of pairs and erasing elements

本文关键字:擦除 元素 一组 迭代      更新时间:2023-10-16

我遇到运行时错误,我怀疑这是因为这是该代码块,我想知道如何在集合上迭代并在中间擦除。

    for (auto it : a) {
        if (freq[it.first] == 1 || freq[it.second] == 1)
            a.erase(it);
    }

我尝试了我在另一个问题上找到的解决方案,但似乎仍然没有用:

    for (set<pair<int, int> >:: iterator it = a.begin(); it != a.end();)
    {
        cout << it->first << " " << it->second << endl;
        if (freq[it->first] == 1 || freq[it->second] == 1)
        {
            removed = true;
            a.erase(it);
        }
        else
        {
            ++it;
        }
    }

这解决了:

for (set<pair<int, int> >:: iterator it = a.begin(); it != a.end();/* blank */)
{
    cout << it->first << " " << it->second << endl;
    if (freq[it->first] == 1 || freq[it->second] == 1)
    {
        removed = true;
        it = a.erase(it);
    }
    else
    {
        ++it;
    }
}