0

これを可能にする構造にいくつかのオブジェクトを追加したい:

  1. オブジェクトの挿入、追加時に構造全体をすぐに並べ替えるので、int の降順になります。

  2. オブジェクトの順序付けに使用される int を変更できる (つまり、オブジェクト番号 2 の int が 5 になっているため、構造を並べ替えます)。

  3. 1秒間に60回完全に繰り返されるため、構造が高速です。

  4. 位置によってオブジェクトに直接アクセスできること。

  5. 上から下に反復するだけで済みます: 高い INT から低い INT へ

  6. 削除する必要はありませんが、後で役立つ可能性があります。

私は C++ 標準ライブラリについてあまり知らないので、構造体の使用方法に関するいくつかの指示は素晴らしいでしょう。

4

2 に答える 2

6

リストしたすべての操作 (インデックスによる検索を除く) は、整数値をキーとする標準の二分探索ツリーでサポートできます。これにより、ソートされた順序で要素を反復処理し、挿入中にオブジェクトをソートしたままにすることができます。@njr が述べたように、バイナリ サーチ ツリーからオブジェクトを削除し、優先度を変更してから、バイナリ サーチ ツリーに再挿入することで、優先度を更新することもできます。

インデックスによるランダム アクセスをサポートするには、順序統計ツリーを調べることを検討する必要があります。これは、他のすべての操作に加えて、インデックスによる要素の非常に高速な (O(log n)) 検索をサポートするバイナリ検索ツリーのバリアントです。つまり、ソートされたシーケンスの 15 番目の要素、または 17 番目などを非常に効率的にクエリできます。順序統計ツリーは C++ 標準ライブラリの一部ではありませんが、この古い質問には実装にリンクできる回答が含まれています。

于 2013-01-05T19:10:11.760 に答える
2

セットまたはマップを使用する

要件 1 の場合 - カスタムの並べ替え関数を提供する

2 の場合 - アイテムを削除して再度追加します (またはそれを行うラッパーを提供します)。

3 意味がありません (リストの大きさ、プロセッサ/RAM の速度)

4 の場合 - 本当にそれが必要ですか? 位置が突然変わる可能性があるときに位置でアクセスしようとするのはちょっと奇妙に思えます(アイテムが追加または削除されました)

5 - 1 と同じ

于 2013-01-05T16:41:58.933 に答える