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/ ) を利用してみてください。ただし、その特定の機能を使用したことがないため、それがまさにあなたが探しているものかどうかはわかりません.

これも役に立つかもしれません: マージソートアルゴリズムを使用してインプレースでソートする方法は?

単純な解決策は、適切な場所にあるバブル ソートを使用することですが、データが多すぎてメモリが心配な場合、これは非常に遅い解決策になります。

もう 1 つ: ファイルが既に並べ替えられていることがわかっている場合、正しい挿入ポイントが見つかるまでファイルを単純に解析するためのオーバーヘッド (挿入する名前を格納する以外に) と O(n) の挿入時間はかかりません。

于 2013-08-08T19:24:12.320 に答える