我如何编写一个循环,使用C ++中的迭代器将unordered_set的每个元素与所有其他元素进行比较?

问题描述 投票:0回答:1

我有一个unordered_set,我需要选择每个元素并将其与所有其他元素进行比较。

注意:

  1. 如果比较A和B,则不需要比较B和A。
  2. 我的unordered_set是一个unordered_map的值,其键是一对。

我尝试了以下操作:

unordered_map <pair<int, int>, unordered_set <int>, boost::hash<std::pair<int,int>>> gridMap;
unordered_map <int, rigidBody*> objectsMap;


    auto gridMapIt = gridMap.begin();
    while (gridMapIt != gridMap.end()) // loop the whole gridMap
    {
        auto setItOut = gridMapIt->second.begin();
        while (setItOut != gridMapIt->second.end()) // loop each element of the set
        {
            auto setItIn = gridMapIt->second.begin();
            while (setItIn != gridMapIt->second.end()) // versus each other element
            {
                //compare and do stuff

                ++setItIn;
            }

            checked.insert({ objectsMap[*setItOut]->getID(), objectsMap[*setItIn]->getID() });
            checked.insert({ objectsMap[*setItIn]->getID(), objectsMap[*setItOut]->getID() });

            ++setItOut;
        }

        ++gridMapIt;
    }

我遇到的错误是“表达式:无法取消引用结束列表迭代器”。如果我删除或评论最里面的while循环,则可以正常工作。

提前感谢。

c++ loops iterator unordered-map unordered-set
1个回答
1
投票

循环后使用*setItIn无效。此时,您有一个迭代器,该迭代器指向最后一个元素past

© www.soinside.com 2019 - 2024. All rights reserved.