我有如下的結構:分揀內存中對象的映射文件
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