我在多映射中得到了两次相同的密钥,它只存在于文本文件中

I got a identical Key twice in a multimap, it just exists one in the textfile.

本文关键字:密钥 存在 文本 文件 于文本 两次 映射      更新时间:2023-10-16

我对multimap有问题。我读了一份文件,里面每个月都存放着Years和Temepatures。

2011 9.23 3.23 4.23等等。

现在我想把每年的平均温度写回一个文件。

我用了一个多重映射。double存储我的平均温度,从我的类Year中,我调用getYear()方法来获得适合平均温度的Year。

我需要多映射,因为有相同的平均温度。

但如果我现在查看输出文件,我会发现2011年有两次平均温度相同

在输入文件中,2011年只写了一次。

我会两次得到相同的年份吗,因为它在输入文件的和处?所以问题可能来自于读取最后一行的文件?

outputf文件的外观如下:

1994 9.7025

2011年9.635

2011年9.635

2002年9.55667

我的字符串流ohneKomma存储输入文件。

while(ohneKomma)    
{  
    Year year;
    ohneKomma >> _jahr;
    year.setJahr(_jahr);
    ohneKomma >> _d1;
    ohneKomma >> _d2;
    ohneKomma >> _d3;
     //and so on....
    year.setAvgTemps(_d1, _d2, _d3, _d4, _d5, _d6, _d7, _d8, _d9, _d10, _d11, _d12);
    map2.insert(make_pair(year.getMittelwert(), year));//fallend
    ;
}

我希望你们能帮助我,为我糟糕的英语感到抱歉,但我希望你们理解我的意思:)

感谢

更改代码以检查输入是否成功作为while条件:

while(ohneKomma >> jahr >> _d1 >> d2 ....)    
{  
    Year year;
    year.setJahr(_jahr);

    year.setAvgTemps(_d1, _d2, _d3, _d4, _d5, _d6, _d7, _d8, _d9, _d10, _d11, _d12);
    map2.insert(make_pair(year.getMittelwert(), year));//fallend
}

在流的末尾尝试读取之前,流不会失败。您需要在第一次读取操作后检查流状态。

while(ohneKomma)    
{  
    Year year;
    ohneKomma >> _jahr;
    if(!ohneKomma)
        break;
    year.setJahr(_jahr);
    // ...
}

将代码修改为如下。它会做同样的事情,但更好。

while(ohneKomma >> _jahr)   //change here.  
{  
    Year year;
    year.setJahr(_jahr);   //note the modification here too.
    ohneKomma >> _d1;
    ohneKomma >> _d2;
    ohneKomma >> _d3;
     //and so on....
    year.setAvgTemps(_d1, _d2, _d3, _d4, _d5, _d6, _d7, _d8, _d9, _d10, _d11, _d12);
    map2.insert(make_pair(year.getMittelwert(), year));//fallend
    ;
}

这是读取文件的正确方法,不会遇到奇怪的EOF错误。