L
私は(一般的な意味ではなくstd::list
)数のリストを持っており、これは。i
の最小要素のインデックスでもありL
ます。インデックスで区切られた2つのパーティションを交換したいi
。これを可能な限り効率的に(できれば一定時間で)実行できるようにするには、どのような標準データ構造とどの操作を実行する必要がありますか?
例:にしましょL
う9 6 -4 6 12
。最小値はL[2] = -4
、なのでi = 2
。2つのパーティションを交換した後、私はなりたいL
です-4 6 12 9 6
。
リストはかなり大きく(最大10 3要素)、複数回トラバースする必要があるため(最悪の場合、最大10 3トラバージョン)、キャッシュの問題があるため、使用することはstd::list
お勧めできません。一方、std::vector
2つのパーティションを交換することは困難になります。これにはstd::deque
良い選択ですか?