Я пытаюсь вызвать qsort
в Cython с помощью специальной функции сравнения, но я не понимаю, как передать ссылку на функцию. Во-первых, у меня есть структура:
cdef struct Pair:
int i,j
float h
Функция сравнения сортируется по h
:
cdef int compare(const_void *a, const_void *b):
cdef float v = ((<Pair*>a)).h-((<Pair*>b)).h
if v < 0: return -1
if v > 0: return 1
return 0
Это та часть, с которой у меня возникают проблемы:
cdef Pair[5] pa
for i in range(5):
pa[i].i = i;
pa[i].j = i*2;
pa[i].h = i*.5;
qsort(pa,5,sizeof(Pair),compare)
Последняя строка не будет компилироваться и генерирует эту ошибку, которая, как мне кажется, связана с тем, что я не могу понять, как передать compare
в качестве ссылки на qsort
:
Cannot assign type 'int (const_void *, const_void *)' to 'int (*)(const_void *, const_void *) nogil'