ベクトルと連結リスト
ベクトルは連続してメモリに格納されるため、配列と同様に、 を使用して任意の要素にアクセスできますoperator[]
。
リンクされたリストには、メモリに連続して格納できない可能性のある要素が含まれているため、イテレータを使用してポインタをたどってランダムな要素にアクセスする必要があります。
(あなたはおそらくすでにこれを知っていました。)
Priority Queのメリット
最近、スタックのように機能する「優先キュー」を発見しましたが、要素はpush()
コンテナーに入れられ、この関数は、との比較に従ってそれらを順番に配置しoperator<
ます。
イベントをテストし、イベントが発生するまでの残り時間に従ってキューに配置しているので、これは私にぴったりです。push()
キューは、Iおよびpop()
要素として自動的に並べ替えます。(ポッピングは順序に影響しません。) は書けるoperator<
ので問題ありません。
解決できなかった問題
このイベント キューでできるようにする必要があることが 3 つあります。
1:) イベント キューでアイテムを検索します。これは標準ライブラリのアルゴリズムで実行できると思いますか? たとえば、「見つける」?そうでない場合は、ポイント 2 を実行できれば、自分で実装できます (下記参照)。
2:) キューを反復処理します。デフォルトの基になるコンテナーはstd::vector
...基になるベクター内のランダムな要素にアクセスする方法はありますか? std::deque
代わりに使用することを選択した場合はどうなりますか? 特定のイベント パラメータを変更するには、これを行う必要があります。(イベントはキューに入れられます。)例として、イベントを処理し、残りの各イベントの「time_to_event」パラメーターから一定の時間を減算する必要がある場合があります。この質問のため、これはできないと思います。
3:) 要素をキューから削除します。イベントを処理しているときに、他のイベントが無効になることがあるため、削除する必要があります。
ポイント1~3はできますか?私が持っているすべての情報はcplusplus.comstd::priority_queue
からのものなので、デフォルトの答えは「いいえ」です。これらのことを行う方法はありません。3 つすべてを実行できない場合は、独自の Priority Queue ラッパーを作成する必要があると思います。(ああ退屈)