按排序顺序更新文件

时间:2013-08-08 19:13:26

标签: c++ file

假设我的文件包含名称

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

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

1 个答案:

答案 0 :(得分:0)

Per 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)插入时间来简单地解析文件,直到找到正确的插入点。 / p>