Как я могу использовать c ++ std :: merge для объединения двух отсортированных векторов в Cython? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть два отсортированных вектора, которые я хотел бы объединить.Можно ли сделать это просто с помощью c ++ std :: merge или мне нужно свернуть свой собственный?Я не смог найти слияние в libcpp.

1 Ответ

0 голосов
/ 09 октября 2018

Не все c ++ - методы обернуты в cpplib Cython, но используя уже обернутые методы в качестве чертежа, легко обернуть отсутствующую функциональность - нет необходимости переопределять алгоритм (независимо от того, какпросто)

Например:

%%cython  --cplus 
from libcpp.vector cimport vector

# wrap it yourself!
cdef extern from "<algorithm>" namespace "std" nogil:
   OutputIter merge[InputIter1, InputIter2, OutputIter] (InputIter1 first1, InputIter1 last1,
                        InputIter2 first2, InputIter2 last2,
                        OutputIter result)

# for ilustration purposes:
cdef vector[int] v1=[1,3,5]
cdef vector[int] v2=[2,4,6]
cdef vector[int] out = vector[int](6)

merge(v1.begin(), v1.end(), v2.begin(), v2.end(), out.begin())

print(out)

приводит к ожидаемому выводу при импорте расширения Cython:

[1,2,3,4,5,6]
...