私は以下のような構造を持っているに:ソートは、メモリマップドファイル
struct XX
{
int x;
char szT[200];
int y;
} ;
私はfwrite
呼び出して書かれたこれらのXX
オブジェクトのいくつかを格納するファイルを持っています。私はMMAPを使用してメモリmmapedファイルとしてファイルを読み込むときに、今、私はとして使用します。
XX *px = (XX*) p;
:
// sz = size of the file in bytes
// fd = file descriptor of the file opened through fopen in O_RDWR mode
char *p = (char *) mmap(0,sz,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
unsigned int N = (sz/sizeof(XX)); // number of objects
私はタイプXX
のN
オブジェクトを持っている場合はこのように、私は最初のオブジェクトにアクセスすることができます。
そしてi-th
オブジェクトはpx + i
としてアクセスできます。i <= N
です。 std::sort
を使用して、アクセスされるメモリマップファイルの内容を、最初のレコードのポインタであるpxと、i-th
レコードを指すpx+i
としてソートすることができます。 px, px+1, px+2
などをXX
ポインタのベクトルにvector<XX*>
という名前で格納したくないのですが、メモリマップファイルから直接レコードにアクセスできるためです。 お勧めします。
* _etcをベクトルポインタとしてXXポインタのベクトルに格納すると、メモリマップファイルからレコードに直接アクセスできます。 ._ * これに混乱してください。 std :: sortを使用する場合は、標準ライブラリデータ構造のいずれかを使用するか、STLの仕様で独自のデータ構造を作成する必要があります。 –
DavidBittner
ベクトルとしてを使用すると、std :: sort(v.begin()、v.end()、comparexx)を使用することがありますが、メモリマップされたファイルを持っている場合、 Xの比較のための関数? –
私は問題が何であるかを見ます。ラムダを使用してください。 @Basile Starynkevitchによって以下に述べるように、std :: sort関数はオプションでstd ::関数を取り、情報のソート方法を示します。 – DavidBittner