0

假设我的文件包含名称

         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);

病房之后,我将以写入模式打开文件,然后将矢量内容复制回文件中,但这需要太多内存,是否有任何方法可以在不使用任何额外内存的情况下更新文件

4

1 回答 1

0

根据http://www.cplusplus.com/reference/algorithm/sort/,vector::sort 在 O(nlogn) 时间执行,尽管它没有任何关于开销的信息。如果您真的想节省内存,您可以编写一个对数据进行就地排序的函数,或者尝试利用 inplace_merge ( http://www.cplusplus.com/reference/algorithm/inplace_merge/ )。不过,我从未使用过该特定功能,因此我不知道它是否正是您要寻找的。

这也可能对您有用: How to sort in-place using the merge sort algorithm?

一个天真的解决方案是使用冒泡排序,它已经到位,但是如果您有太多数据以至于您担心内存,那么这将是一个非常缓慢的解决方案。

还有一件事:如果您知道文件已经排序,则无需开销(除了存储要插入的名称)和 O(n) 插入时间即可简单地解析文件,直到找到正确的插入点。

于 2013-08-08T19:24:12.320 回答