使用cstdlib中的qsort

时间:2013-08-04 14:37:28

标签: c++ qsort

我正在尝试从cstdlib运行qsort。功能

  

qsort(m_all_animals,numberOfAnimals(),sizeof(Animal *),compare);

成功执行但不对m_all_animals进行排序。实际上,它对数组没有任何作用。基础数据结构在这里

Animal** m_all_animals;

//the number of elements, I tested it and it works
int numberOfAnimals(){
    int result=0;
    for (int i=0;i<m_size*2;++i){
        if (m_all_animals[i]==NULL)
            break;
        ++result;
    }
    return result;
}

int compare (const void* p1, const void* p2){
        return ((Animal*) p1)->get_size()-((Animal*) p2)->get_size();
}

如果有帮助,我有以下继承层次结构

Animal<-Bear
Bear<-brown_bear
brown_bear<-white_bear
Bear<-panda_bear
Animal<-snail

3 个答案:

答案 0 :(得分:4)

不要在C ++中使用qsort()!它很慢,不是类型安全的,并且在非POD类型上使用时会破坏破坏。请改用std::sort()

答案 1 :(得分:2)

你的是指向Animal的指针数组,所以你的compare函数实际上指向指向Animal的指针:

int compare (const void* p1, const void* p2){
        return (*(Animal**)p1)->get_size()-(*(Animal**)p2)->get_size();
}

答案 2 :(得分:2)

您的指针不正确。你有一个指针数组(Animal *);如果要使用Animal,它应该是compare数据类型的数组而不是指针。或者,您需要修改compare以使用Animal **