ste*_*315 6 c++ string file-io
我有一个文本文件,其中包含以下格式的游戏高分:
Name Score
Name Score
Name Score
Run Code Online (Sandbox Code Playgroud)
文件按分数降序排列。
我想在文件中的正确位置插入一个新名称及其相应的分数,以便它保持正确的顺序。任何如何做到这一点的建议将不胜感激!
例如,给定以下文件:
Edward 100
David 90
Sarah 80
Alice 60
Run Code Online (Sandbox Code Playgroud)
我想补充一下。
Name = Jodi
Score = 70
Run Code Online (Sandbox Code Playgroud)
到文件,所以新文件读取:
Edward 100
David 90
Sarah 80
Jodi 70
Alice 60
Run Code Online (Sandbox Code Playgroud)
谢谢
目前我有以下代码:
string playerName = pPlayer->GetName();
int playerScore = pPlayer->GetScore();
std::ofstream score("scores.txt", std::ios_base::app | std::ios_base::out);
score << "\n" << playerName << " " << playerScore;
Run Code Online (Sandbox Code Playgroud)
这只是将名称添加到文件末尾。我考虑阅读整个文件并对其进行排序,然后对旧文件进行纠正。但我不想这样做,因为如果文件变大,可能需要很长时间。
有几种不同的方法可以做到这一点。最简单的实现是将整个文件读入向量,插入新值并写出新文件。
第二种选择是读取文件,直到找到正确的位置,“标记”文件中的位置(例如使用istream::tellg()),然后将以下所有元素读入向量,更新新记录,并写回一旦超出这个范围。
第三种选择是仅使文件中的列表保持无序,并在阅读时对信息进行排序。这样,您只需追加到末尾即可,从而节省了一遍又一遍地写入文件的时间。
事实上,我怀疑写入一个非常大的文件仍然足够快,几乎没有什么区别。现代硬盘驱动器每秒写入许多兆字节,而每行只有几十个字节,因此文件中需要有数百万行才能产生任何影响。例如,我刚刚在我的机器上复制了一些132MB的大文件,读取和写入132MB的综合时间为1.2s。如果每条记录都是 26 字节,那就是 5000 万个“分数”。
| 归档时间: |
|
| 查看次数: |
16898 次 |
| 最近记录: |