假设我有一个这样的文本文件:
1 2
1 3
2 7
2 8
我想做的是将它们放在链表的映射中。所以我已经像这样初始化了一个 map ,map <int, list<int> > myMap;
我的问题是我不知道如何将它添加到列表中。通常,我们可以通过 myMap[someKey] = someValue;
添加到 map 中。
我在向列表中添加值时遇到问题。
我想要的是检查读取的第一个 int 是否在映射中,如果不在,则创建该条目,并将第二个 int 添加到与该键对应的列表中。例如,如果正确完成,第 1 行应该插入一个键 1 和一个包含元素 2 的链表。 如果 map 已经有那个键,那么该行的第二个 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);
}
}
}
最佳答案
一旦您从文件中读取了两个值,这就是您所需要的:
vertices[tail].push_back(edges);
这将完全按照您的意愿进行。 vertices[tail]
将返回对该 map 位置列表的引用。如果该列表尚不存在,将默认在那里构建一个。无需检查它是否已经存在,因为 operator[]
无论如何都会这样做。
关于c++ - 如何添加到 map <int, list <int>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33619589/