혼자 해결하려고 정말 많이 고민해도 답이 없어서 이렇게 글을 올립니다..
1. A라는 이름의 구조체가 있고, 멤버는 다음과 같습니다.
int idx;
vector <구조체B*> B_list;
2. B라는 이름의 구조체의 멤버는 다음과 같습니다.
string word;
int freq;
3. 구조체A로 이루어진 vector A_list가 있구요,
4. 구조체B로 이루어진 vector B_list가 있습니다.
.....................................
이 때 A_list는 idx를 기준으로 sort이 잘 됩니다.
#include <stdlib.h>
qsort(&A_list[0], A_list.size(), sizeof(A_list[0]), compa);
int compa(const void* a, const void* b) {
int x = ((구조체A*)a)->idx;
int y = ((구조체B*)b)->idx;
if (x < y) return 1;
else if (x == y) return 0;
else
return -1;
}
....................................
근데 구조체A 안에 있는 B_list(구조체B로 이루어진)는 죽어도 정렬이 안됩니다 ㅜㅜ
for (int i = 0; i < A_list.size(); i++)
qsort(&A_list[i].B_list[0], A_list[i].B_list.size(), sizeof(A_list[i].B_list[0]), compb);
int compb(const void* a, const void* b) {
int x = ((구조체B*)a)->freq;
int y = ((구조체B*)b)->freq;
if (x < y) return 1;
else if (x == y) return 0;
else
return -1;
}
아무리 짱구를 굴려봐도 제가 뭘 빼놓고 생각하고 있는건지 잘 모르겠습니다.
제가 놓치고 있는 부분이 무엇인지 알 수 있을까요?
int x = (*((구조체B**)a))->freq;
완전 기겁할 코드군... 한마디로 말하면 "저러지 마라". qsort 첫 번째 파라메터는 포인터고 vector의 반복자는 "실제 포인터가 아니다".
vector를 정렬하려면 sort()를 써라.