2012-08-02 5 views
0

C에서 개체의 정렬 가능한 컬렉션을 만들려고합니다. 각 개체는 고유 한 문자열과 사전 또는 해시와 같은 일종의 비 고유 정수로 구성됩니다. 하지만 트릭은 정수 부분으로 콜렉션을 정렬 할 수 있어야합니다.C에서 문자열 - 정수 쌍의 정렬 가능한 컬렉션을 만드는 방법은 무엇입니까?

{ 
    {"yet another string", 74}, 
    {"string 1", 10}, 
    {"another string", 4} 
    } 

아이디어 : 질서 결과를 내림차순으로 정렬하는 경우

{ 
    {"another string", 4}, 
    {"string 1", 10}, 
    {"yet another string", 74} 
    } 

나 :

a = 
    { 
    {"string 1", 10}, 
    {"another string", 4}, 
    {"yet another string", 74} 
    } 

이 오름차순으로 결과에 a 정렬 :과 같이 예를 들어, 컬렉션 보이는 경우 는 일단 정렬되면 get_the_first_sorted_item(a) 또는 그와 비슷한 것을 말하고 그 뒤에는 get_the_next_sorted_item(a) 또는 컬렉션 끝까지 도달 할 때까지 비슷한 것을 말할 수 있습니다.

Judy 배열이 도움이 될 것이라고 생각했지만, 이제는 '가치'가 아니라 '키'를 기반으로하는 자체 분류 체계가 있음을 알게되었습니다.

누구나 그런 해결책을 찾을 수있는 방향으로 나를 가리킬 수 있습니까?

+1

왜 :'sort (inputarray, outputarray)'? (그리고 나서 "normal array iteration"을 사용하십시오.) 문자열은 "공유"될 수 있습니다. –

답변

0

해시 테이블에 요소를 저장하여 이름 조회가 가능하도록하고 해시 요소에 대한 포인터가 포함 된 우선 순위 큐를 구성하여 빨리 가져 오기 - 다음 조회를 할 수도 있습니다.

2

qsort은 ISO C에서 정의되며 struct의 정렬을 허용하는 비교 함수를 취하며 사용자 목적에 맞게 작동해야합니다.

// The type of the entries. 
typedef struct { const char* str; int num; } A; 

// A comparison function 
int compar(const void* a, const void* b) 
{ 
    return ((A*)a)->num - ((A*)b)->num; 
} 

... 

A a[] = { 
    { "string 1", 10 }, 
    { "another string", 4}, 
    { "yet another string", 74} 
}; 

// Sort the entries 
qsort(a, sizeof(a)/sizeof(A), sizeof(A), compar); 
관련 문제