我有如下的结构:分拣内存中对象的映射文件
struct XX
{
int x;
char szT[200];
int y;
} ;
我具有存储几个这些XX
目的,通过fwrite
呼叫写入的文件。现在,当我使用mmap读取该文件作为存储mmaped文件,我使用如:
// 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
目的,我可以访问第一对象为:
XX *px = (XX*) p;
而且,i-th
对象我可以访问为px + i
其中i <= N
。 我可以使用std::sort
对正在访问的内存映射文件的内容进行排序,因为px是第一条记录的指针,而px+i
指向i-th
记录。 我不喜欢存储px, px+1, px+2
等XX
作为vector<XX*>
指针向量,因为我可以直接从内存映射文件访问记录。 请建议。
* _etc在XX指针向量中作为向量,因为我可以直接从内存映射文件访问记录。请建议._ * 感到困惑。如果你想使用std :: sort,你将不得不使用其中一个标准库数据结构,或者根据STL的规范创建你自己的数据结构。 –
DavidBittner
如果我使用一个向量作为v,那么我可以使用std :: sort(v.begin(),v.end(),comparexx),但是当我有内存映射文件时,如何使用自定义比较函数进行X比较? –
没错。我看到了什么问题。使用lamda。如@Basile Starynkevitch所述,std :: sort函数可选地使用std ::函数来显示如何对信息进行排序。 – DavidBittner