혼자 해결하려고 정말 많이 고민해도 답이 없어서 이렇게 글을 올립니다..


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;

}


아무리 짱구를 굴려봐도 제가 뭘 빼놓고 생각하고 있는건지 잘 모르겠습니다.

제가 놓치고 있는 부분이 무엇인지 알 수 있을까요?