typedef struct { char *name; char type; long size; } NODE; class CloudUploadMenu : public DGContainerMenu { public: .... 略 ..... private: .... 略 ..... vector<NODE*> dir_node; private: .... 略 ..... static int CompareData(const void *, const void *); }; int CloudUploadMenu::GetDirFile(char *path) { .... 略 ..... qsort(&dir_node[0], dir_node.size(), sizeof(NODE*), CompareData); return 0; } int CloudUploadMenu::CompareData(const void *a, const void *b) { if ((*((NODE**)a))->type == (*((NODE**)b))->type) return(strcmp((*((NODE**)a))->name, (*((NODE**)b))->name)); else return((*((NODE**)a))->type - (*((NODE**)b))->type); } void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*));

重點

  • vector 不要用指標變數,不知為啥就是有問題。
  • compare function 需要宣告成 static,因為它是函數指標。
  • base 指向 vector 的第一個元素。
  • num 指向 vector 的 size。
  • size 則取 vector 型別T的大小。
  • 記得不要用 vector.at() 來取得第一筆資料,因為當 size=0 會造成當機。
  • 看別人的文章說 std::sort 的速度比 qsort 快,而且也比較符合 vector 的用法,但是剛好我的 embeded linux 沒支援,所以就沒實做了。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()