如何为qsort写比较器函数?

Som*_*ser 2 c++ oop

例如:

class classname{
public:
int N,M;
}; 
Run Code Online (Sandbox Code Playgroud)

classname a> classname b如果aN> BN

ken*_*ytm 5

class classname{
  public:
    int N,M;

    bool operator< (const classname& other) const { return N < other.N; }
};

...
std::vector<classname> arr;
...
std::sort(arr.begin(), arr.end());
Run Code Online (Sandbox Code Playgroud)

或者你想使用C qsort

static int compare_classname (const void* a, const void* b) {
   const classname* _a = reinterpret_cast<const classname*>(a);
   const classname* _b = reinterpret_cast<const classname*>(b);
   return _a->N < _b->N ? -1 : _a->N > _b->N ? 1 : 0;
}
...
classname* arr = new classname[n];
...
qsort(arr, n, sizeof(arr[0]), compare_classname);
Run Code Online (Sandbox Code Playgroud)

  • 为什么?qsort已经过时了.std :: sort是新的热点 (5认同)
  • 对于`qsort`类型的大多数用途,安全性通常不是一个问题(它通过`void*`是一个简单的"反弹"),除非你接受来自你不信任的代码的随机函数指针.是的,std :: sort _can_更快,也适用于非POD类型.但是,如何使这个"qsort"被"破坏"以达到其预期目的? (4认同)
  • 什么是关于`qsort`的"被破坏"? (2认同)
  • @Charles:打字安全. (2认同)