私は、int:pairのペアを維持する必要があるC++(Windows上)の状況を抱えています。開始値はユニークですこれには関係ない)。必要な 操作は次のとおりです。C++:効率的なカスタムデータの挿入と取得のためのデータ構造
- 挿入ペア
- はペアのXを取得する:これはYの開始< Xは< Xのエンド< Yの終わりを開始ペアYを返す必要があります。 Yが存在しない場合はfalseを返します。
基本的な解決策は、単にペアのセットを保持することです。検索のために、チェックの対象となるセットを順番に繰り返します。これはO(n)です。
私はより良い解決策を探しています。私は現在、2つの候補のデータ構造を参照してください。
- ソートベクトル
- STLのセット(内部的にバイナリ検索ツリーとして実装?)
ソートベクトル: 長所:サポートするために、バイナリ検索をカスタマイズすることができます検索操作。これはO(logn) 短所:ソートされた順序を維持するために新しいペアを効率的に挿入する方法。 O(nlogn)の再ソートコストを避ける方法は?
セット: 長所:標準の挿入方法を使用して簡単に挿入できます。これはO(1)ですか? 短所:順次検索を避けるにはどうすればよいですか?どのようにO(n)よりもうまくいくのですか?
ご協力いただきありがとうございます。
私は上記の2つの操作を効率的にサポートできる他の構造(第1の基準は速度、第2はメモリ)にも対応しています。
'x = 3'で' 1,2'のいずれかを持つ構造体から検索しようとすると、説明に欠落した状況があります。どちらを使うべきですか? – Jack
std :: mapは明らかな選択肢のように思えます。実際にはちょうどstd :: pairsのペアで、比較演算はペアの最初の部分だけを参照します。 –
@Jack:ありがとう。私の状況では、開始値の値が重複することはできません。私は質問を更新しました。ありがとう。 –