将qsort与std :: sort进行比较

时间:2012-04-23 06:47:42

标签: c++ dictionary std stdmap qsort

I am referring you to a previous link that compares the performance of qsort vs stdsort

我编写了一个C程序,填充了一个大的std::map,我想对数组进行排序。我目前正在使用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调用会产生编译错误

  

没有用于调用‘sort(port_count_t [10], long unsigned int)’

的匹配函数

我想比较std::sortqsort算法的效果。我该怎么做?

2 个答案:

答案 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个对象,并且当第一个参数在第二个参数之前排序时返回true false否则。

答案 1 :(得分:0)

尝试致电:

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

std :: sort将begin和end迭代器作为参数。因此,为了对数组进行排序,您可以将指针传递给数组的开头,并在数组结束后传递指向一个元素的指针(总是为array_pointer + array_size)。