如何添加到地图<int,list =“”<int =“”>&gt;

时间:2015-11-09 22:33:34

标签: c++ list dictionary

说我有一个像这样的文本文件:

1 2
1 3
2 7
2 8 

我想做的是将它们放在链表的地图中。所以我初始化了一个这样的地图,map <int, list<int> > myMap;

我的问题是我不知道如何将其添加到列表中。通常情况下,我们只需myMap[someKey] = someValue;即可添加到地图中 我在列表中添加值时遇到了问题。

我想要检查读取的第一个int是否在地图中,如果没有,则创建该条目,并将第二个int添加到与该键对应的列表中。例如,如果正确完成,第1行应该插入1的键和元素为2的链表。 如果映射已经具有该键,则该行的第二个int应该只添加到其链接列表中。例如,第2行应该只将元素3添加到1的链表中。

我希望的是:

key : value 
1 : 2 -> 3
2 : 7 -> 8

这是我的代码:

ifstream infile;
infile.open(fname.c_str());
string line = "";
if (infile){
    while (getline(infile, line)){
       istringstream iss(line);
       int tail;
       iss >> tail;
       int edges;
       if (vertices.find(tail) == vertices.end()){
           iss >> edges;
           vertices[tail] = vertices[tail].push_back(edges);
           //I'm getting this error: no viable overloaded '='
       }
       else{
           iss >> edges;
           vertices[tail].push_back(edges);
       }
    }
}

1 个答案:

答案 0 :(得分:3)

一旦您从文件中读取了两个值,这就是您所需要的:

vertices[tail].push_back(edges);

这将完全符合您的要求。 vertices[tail]将返回对该地图位置列表的引用。如果列表尚未存在,那么将在那里默认构建一个列表。无需检查它是否已存在,因为operator[]无论如何都会这样做。