按排序顺序更新文件

updating a file in sorted order

本文关键字:文件 更新 顺序 排序      更新时间:2023-10-16

假设我的文件包含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)插入时间。