2012-04-23 3 views
0

I am referring you to a previous link that compares the performance of qsort vs stdsort.qsort와 std :: sort의 비교

std::map을 채우는 C 프로그램을 작성했으며 배열을 정렬하고 싶습니다. 현재 qsort을 사용하고 있습니다.

typedef std::map<uint16_t, uint32_t> TSrcMap; 
TPSrcMap sp; 
TSrcMap::iterator its; 
/*Code to populate the array_start.*/ 

/*Code to populate the array_end.*/ 

typedef struct port_count 
{ 
     uint32_t port_number; 
     uint32_t port_count; 
}port_count_t; 

port_count_t pcount[10]; 
memset(pcount,0,sizeof(pcount)); 
size_t structs_len = sizeof(pcount)/sizeof(port_count_t); 
for(its = stcp.begin(); its != stcp.end();its++) 
{ 
     if(pcount[smallest_index].port_count < (*its).second) 
     { 
      pcount[smallest_index].port_count = (*its).second; 
      pcount[smallest_index].port_number = (*its).first; 
      /*qsort(pcount, structs_len, sizeof(port_count_t), struct_cmp_by_port_count);*/ 
      std::sort(pcount,sizeof(port_count_t)); 
     } 
} 

qsort 함수 정확하게 배열을 정렬한다. 나는 qsortstd::sort의 성능을 비교하고자 std::sort는하지만 전화 std::sort 호출이 ‘sort(port_count_t [10], long unsigned int)’

에 컴파일 오류

에게 통화에 대해 일치 기능을 제공하지 않습니다와 qsort의 성능을 비교하고자 연산. 어떻게해야합니까?

+0

질문에 대한 답변을 생각한다면 해당 답변을 수락하십시오. –

답변

6

std::sort()의 서명은 다음과 같습니다

template <class RandomAccessIterator, class StrictWeakOrdering> 
void sort(RandomAccessIterator first, RandomAccessIterator last, 
      StrictWeakOrdering comp); 

그래서 두 개의 반복자비교 아닌 포인터와 길이를 필요로한다. 코드를 해결하려면,

std::sort(pcount, pcount+structs_len, cmp_port_count); 

cmp_port_count 참조에 의해 두 port_count_t 객체를 받아 첫 번째 인수가 false 그렇지 않으면, 두 번째 인수 전에 주문하는 경우 true를 반환하여 비교 기능이라고 가정 호출합니다.

+2

+1. 마지막 부분은 중요합니다. 'std :: sort'는 비교 자에 대해 다른 규칙을 사용합니다. – MSalters

0

호출 시도 : 인수는 시작과 끝 반복자로

std::sort(pcount,pcount + 10); 

표준 : 종류가 소요됩니다. 따라서 배열을 정렬하려면 배열의 시작 부분에 대한 포인터와 배열 끝 뒤의 한 요소에 대한 포인터 (항상 array_pointer + array_size)를 전달합니다.

관련 문제