[英]File data read to map, but map::find() doesn't work
我需要在地图中找到一个键/值对,但是由于地图的填充方式,由于某些原因, map::find()
无法正常工作。
它读取的数据可以归结为
Key1,a,b,c
Key2,a
Key3
Key4,a,b
这样,我可以使用迭代器循环打印所有这些数据,但是map::find()
不适用于Key3
或Key4
。
这样从文件中收集数据:
file.open("input.txt");
std::string line;
std::string key;
while(getline(file,line,','))
{
key = line;
getline(file,line);
m[key]=line;
}
可以打印:
for(auto it = m.begin(); it != m.end(); ++it)
{
std::cout<<it->first<<","<<it->second<<std::endl;
}
输出:
Key1,a,b,c
Key2,a
Key3
Key4,a,b
但是无论出于什么原因,根据map::find()
都不存在Key3
和Key4
。
我试过检查错误位,手动设置Key3
的值,似乎没有任何工作让我对Key3
之后的值使用map::find()
。 (map :: find()返回这些值的map.end())
我几乎可以肯定这是因为我收集数据的方式,特别是因为Key3
没有逗号,但是我必须以这种形式保留它。
而(函数getline(文件,行, ''))
上面的行正在寻找定界符','。 但是,由于文件中的第3行没有'',因此它将有效地读取[Key3 \\ nKey4]作为键。
因此,错误。
由于您无法更改文件,因此建议您使用默认的定界符'\\ n'读取整行,然后从填充的字符串中进行解析。
不过请注意,如果您希望Key3存在于地图中,则需要一个哨兵值,或者使用map :: count()成员函数检查其是否存在。
因此,尽管这不能解释最初的问题是什么,但这是我找到的解决方案。
现在从文件中收集数据
file.open("input.txt");
std::string line;
std::string key;
std::stringstream ss;
while(getline(file,line,'\n'))
{
ss << line;
getline(ss,line,',');
key = line;
getline(ss,line,'\n');
m[key] = line;
ss.clear();
}
以这种方式从文件中获取数据可确保现在正确读取数据,这是由user3389943提供的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.