基本的には、標準のテンプレートライブラリキューに相当し、ディスクをストレージとして使用するように実装されています。キューに入れる必要があるデータの量は、今日のほとんどのコンピュータのRAMに保存できる容量よりはるかに大きいです。FIFO(またはスタック)はディスクではなくRAM(好ましくはC++)で実装されています
理想的には、私は使用するライブラリの後です。ただし、このキューを実装する方法に関する推奨事項は有用です。
基本的には、標準のテンプレートライブラリキューに相当し、ディスクをストレージとして使用するように実装されています。キューに入れる必要があるデータの量は、今日のほとんどのコンピュータのRAMに保存できる容量よりはるかに大きいです。FIFO(またはスタック)はディスクではなくRAM(好ましくはC++)で実装されています
理想的には、私は使用するライブラリの後です。ただし、このキューを実装する方法に関する推奨事項は有用です。
あなたはSTXXLで見たいと思うかもしれません:
「STXXLのコアは、外部メモリ用のC++標準テンプレートライブラリSTLの実装(アウトオブコア)の計算である、すなわち、STXXLは、コンテナを実装し、ディスクに収まる膨大な量のデータを処理できるアルゴリズム」
+1すてきな小さなライブラリ。私はこれが存在するのを知らなかった! – dirkgently
これは素晴らしいライブラリです。また、複数のディスクにまたがるデータのストライピングもサポートしています。 –
ありがとうございます。それはまさに私が必要とするもののように見えます。 – Adam
野生のアイデア:ディスク上のファイルを読み書きするアロケータクラスを実装し、STL deque
またはqueue
など、必要に応じてそれらに渡します。
STLXXライブラリを調べるとよいでしょう。これには、Peter Sandersが記述した "Sequence Heap"モデルを使用したディスクベースの優先度キューが含まれています。
データについて教えてください。各項目は大小ですか?それは固定サイズか非常に可変ですか?ディスクストレージの問題は、アイテムのサイズがさらに大きくなるにつれて、問題がデータベースの問題に似ています。その場合は、キューのバッキングストアとしてsqlliteデータベースのようなものを調べるべきでしょう。その後、SQLを使用して最初のレコードを取り出すことができます。
データが本当に大きい場合は、増分ファイル名を使用して各オブジェクトをファイルシステムに保存するだけです。次に、キューをメモリに格納する必要はありません。ファイルの日付がFIFOの順番になります。ディレクトリ内の最も古いファイルを取得し、最初の項目を「スタック」から取り出します。
最後に、データが小さい場合は、std :: listまたはstd :: dequeのAllocatorをオーバーライドすることを検討してください。 AllocatorクラスのファイルIOを非表示にすることができます。私は、小規模かつ多数のデータインスタンスに対して単純なソリューションを持っていません。
これは、キュー・ハンドラの作成者は多くの場合、あなたがハンドルのメモリ内のスタックを持っていることによってこの問題を解決することができます
if(p[i].printerq.size()>0)
{
temp_int=p[i].printerq.back().getPid();
counter=0;
cout<<"Ready to continue?"<<endl;
system("pause");
system("cls");
cout<<"Printer "<<i+1<<endl<<endl;
do
{
if(counter==3)
{
cout<<"Ready to continue?"<<endl;
system("pause");
system("cls");
counter=0;
}
cout<<p[i].printerq.front();
p[i].printerq.push(p[i].printerq.front());
p[i].printerq.pop();
++counter;
}while(temp_int!=p[i].printerq.front().getPid());
if(p[i].printerq.size()>1)
{
cout<<p[i].printerq.front();
p[i].printerq.push(p[i].printerq.front());
p[i].printerq.pop();
}
}
else
{
cout<<"Printer "<<i+1<<" is empty."<<endl;
}
をコーディングするコンストラクタがあり、もちろん行く方法です。 – MSalters