各Wバイト幅のNレコードの連続バッファがあります。NとWはどちらもコンパイル時に不明です。N*Mは500mbの注文です。これをsort()やnth_element()などの標準のSTL引数で使用したいと思います。手元にコンパレータがあります。すでに実装されている方法はありますか?
これまでのところ、私は2つの方法を考えました。
1)インデックス0 ... Nで満たされた追加のベクトルを使用し、データの代わりに(カスタムコンパレータを使用して)並べ替えて、並べ替えられた順序でデータレコードに似せるようにし、そのベクトルに従ってデータレコードを移動します。欠点:追加のメモリ、データレコードの順序を修正するための追加の難しさ、これはわずかに重要です。
2)レコードに似た一時的な「仮想」クラスインスタンスを返すカスタムイテレータ(Wを認識)を作成し、そのクラスのswap()をオーバーロードして、メモリのチャンクを交換します。欠点:ややトリッキーで、やや壊れやすい(swap()が使用されることを知っているなど、いくつかのSTL内部に従う必要があります)。