C++ map<int, vector <int>> 段错误

标签 c++ stl adjacency-list push-back

我正在尝试从文件中读取有向图邻接列表。我将它存储在每个节点的映射到它所连接的节点的 vector 中。以下是连接到节点 1 的节点的示例输入行。

1   37  79  164 155 32  87  39  113 15  18  78  175 140 200 4   160 97  191 100 91  20  69  198 196

我有以下代码编译成功但在运行时,在下面指示的循环中给出了段错误。

typedef map<int, vector<int> > adjList;
ifstream file;
file.open("kargerMinCut.txt", ifstream::in);
string line;
adjList al;
while(!file.eof())
{
    getline(file, line);
    stringstream buffer(line);
    int num;
    buffer >> num;
    al.insert(make_pair(num, adjList::mapped_type()));

    // the below loop causes segmentation fault
    while (!buffer.eof())
    {
        buffer >> num;
        al.end()->second.push_back(num);
    }
}

我是 STL 的新手,所以我可能遗漏了一些明显的东西,但请帮助我。

最佳答案

对于所有 STL 容器,end 返回指向最后一个元素之后的一个元素的迭代器。因此你不应该访问这个元素。您的问题行是 al.end()->second.push_back(num);。您可以使用 al->rbegin() 访问最后一个有效元素。

关于C++ map<int, vector <int>> 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23966752/

相关文章:

c++ - LLVM 代码生成链接器错误

c++ - 我可以使用动态构建的比较器创建 map 吗?

java - 无法添加到 map

c++ - C++ 应用程序中 SVRCONN channel 中的 WebSphere MQ SSL

c++ - 桌面 SCADA 应用程序 - 通过 C++ 读取和写入 PLC

c++ - 一个类可以特化一个模板类并同时继承它吗?

c++ - 如何将结构添加到 STL 列表

c++ - 第一个元素的索引 > 到具有 STL::algorithm 的 vector 中的数字?

c - C 中顶点的三角形数量

c - 在c中获取距离为2的邻居图邻接表