J'ai une structure comme ci-dessous:tri des objets dans la mémoire mappée fichier
struct XX
{
int x;
char szT[200];
int y;
} ;
J'ai un fichier qui stocke plusieurs de ces objets XX
, écrits par fwrite
appel. Maintenant, quand je lis le fichier en tant que fichier mmaped mémoire à l'aide mmap, je l'utilise comme:
// 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
Ainsi, si j'ai N
objets de type XX
, j'accéder au premier objet comme:
XX *px = (XX*) p;
Et, i-th
objet que je peux accéder comme px + i
où i <= N
. Puis-je utiliser std::sort
pour trier le contenu d'un fichier mappé en mémoire en cours d'accès comme px étant le pointeur du premier enregistrement, et px+i
pointant vers l'enregistrement i-th
. Je n'aime pas stocker px, px+1, px+2
etc. dans un vecteur de XX
pointeurs comme vector<XX*>
, que je peux accéder aux enregistrements directement à partir du fichier mappé en mémoire. Veuillez nous suggérer.
* _etc dans un vecteur de pointeurs XX que le vecteur, car je peux accéder aux enregistrements directement à partir du fichier mappé en mémoire. S'il vous plaît suggérer ._ * Confus par cela. Si vous voulez utiliser std :: sort, vous devrez utiliser l'une des structures de données de la bibliothèque standard, ou créer la vôtre par la spécification de la STL. –
DavidBittner
Si j'utilise un vecteur comme v, alors je peux utiliser std :: sort (v.begin(), v.end(), comparexx), mais quand j'ai un fichier mappé en mémoire, comment trier en utilisant comparer comparer fonction pour la comparaison X? –
Droite. Je vois quel est le problème. Utilisez un lamda. Comme indiqué ci-dessous par @Basile Starynkevitch, la fonction std :: sort prend en option une fonction std :: pour montrer comment vous souhaitez trier les informations. – DavidBittner