列表迭代器与无序映射不兼容

list iterators not compatible unordered_map

本文关键字:映射 不兼容 无序 迭代器 列表      更新时间:2023-10-16

我有一个相当大的项目,它实现了Dijkstra的算法来模拟网络发送数据包,我遇到了以前从未见过的问题;

我已经设法将问题缩小到这个范围:

//Member function of vertex
unordered_map<Vertex *, int> getEdges()
{
    return _edges; //same data type as return type
}
//Call to member function 
Vertex *t = //Arbitrary vertex
unordered_map<Vertex*, int> edges = t->getEdges();

由于某种原因,在调用此函数时,我收到错误"list迭代器不兼容"。有人明白为什么会发生这种事吗?

编辑:暂时删除

第2版:事实证明,由于我在最后一分钟做了更改,我从getEdges()返回了一个空的无序映射。显然,这会导致"列表迭代器不兼容"。

为了让其他人从我的错误中吸取教训,我会稍后将代码上传到一个更永久的位置。

由于最后一分钟的更改,我从getEdges()返回了一个空的无序映射。显然,这会导致"列表迭代器不兼容"。

以下代码适用于我在NetBeans中使用的C++11。请记住,我使用的值是任意的,当然我已经对每个顶点进行了硬编码,以返回任意的新边(我认为您会更改)。。

using namespace std;
struct Vertex{
    //Member function of vertex
    unordered_map<Vertex*, int> getEdges()
    {
        unordered_map<Vertex*, int> v;
        std::pair<Vertex*, int> first (new Vertex(), 0);
        std::pair<Vertex*, int> second (new Vertex(), 1);
        std::pair<Vertex*, int> third (new Vertex(), 2);
        std::pair<Vertex*, int> fourth (new Vertex(), 3);
        v.insert(first);
        v.insert(second);
        v.insert(third);
        v.insert(fourth);
        return v; //same data type as return type
    }
};

int main(int argc, char** argv) 
{        
    Vertex t;
    //Call to member function 
    unordered_map<Vertex*, int> edges = t.getEdges();
    cout << "edges " << edges.size();
    // clean up
    edges.clear();

    return 0;
}