繁体   English   中英

文件数据读取到map,但是map :: find()不起作用

[英]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()不适用于Key3Key4

这样从文件中收集数据:

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()都不存在Key3Key4

我试过检查错误位,手动设置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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM