按排序顺序更新文件
updating a file in sorted order
假设我的文件包含Names
Nitish
Prudhvi Raj Borra
Rajesh
Srinath
现在我想更新文件的问题是什么我的意思是我想在文件中添加一些数据假设我想输入名称"Sarath Chandra"
文件应该像这个一样按排序顺序更新
Nitish
Prudhvi Raj Borra
Rajesh
Sarath Chandra
Srinath
所以我的方法一开始我会把所有的单词存储在一个向量中
string line;
ifstream fin("somefile.txt");
while(!fin.eof()){
fin>>line;//fin
v.push_back(line);//v some be vector name
}
我也将在矢量中输入名称像这个
sort(v.begin,v.end);
在ward之后,我将以写入模式打开文件,然后将矢量内容复制回文件中但是这占用了太多的内存有没有任何方法可以在不使用任何额外内存的情况下更新文件
Perhttp://www.cplusplus.com/reference/algorithm/sort/,vector::sort在O(nlogn)时间执行,尽管它没有任何关于开销的信息。如果您真的想节省内存,您可以编写一个对数据进行适当排序的函数,或者尝试利用inplace_merge(http://www.cplusplus.com/reference/algorithm/inplace_merge/)。我从来没有使用过那个特定的函数,所以我不知道它是否正是你想要的。
这也可能对您有用:如何使用合并排序算法进行原位排序?
一个天真的解决方案是使用泡沫排序,这是现成的,但如果你有太多的数据,以至于你担心内存,那么这将是一个非常缓慢的解决方案。
还有一件事:如果您知道文件已经排序,那么只需解析文件直到找到正确的插入点,就不需要任何开销(除了存储要插入的名称)和O(n)插入时间。
相关文章:
- 已修改的LinkedList未在文本文件本身中更新
- 如何更新和删除文本文件中的特定逗号分隔值?C++
- C++中的文件处理:更新行
- 更新到 2020 年 5 月版本后,无法在 Visual Studio 2019 中创建.exe文件
- 尝试使用 EvtSetChannelConfigProperty() 函数更新最大事件日志文件大小时插入的错误值
- Chilkat SFTP 文件修改时间不与上传更新
- 如何在文件中更新
- 你能把文件嵌入到exe中,每次使用都更新吗
- 更新文件请求将导致404
- 如果您有Visual Studio 2017 Preview 2更新,您可以为我提供include/iosfwd文件吗?
- 在生成文件中添加源文件并更新依赖项
- 如何确保我的"ifstream"文件对象指向的文件内容已更新?
- 如何使用C++删除/更新txt文件中的特定数据
- 如何使用C++删除/更新txt文件中的特定数据?
- 如何更新/订购'Android.mk'文件?
- 从二进制文件C++更新数据
- Condor输出文件更新
- 使用boost:asio和select?阻止TCP输入或文件更新
- 连续文件更新,递归函数
- 当.h文件更新时,是否应该更新库