如何在cython中使用c ++ std :: merge合并两个排序的向量?

时间:2018-10-09 13:51:30

标签: cython

我有两个要合并的向量。是否可以仅使用c ++ std :: merge来做到这一点,还是我需要自己滚动?我在libcpp中找不到合并。

1 个答案:

答案 0 :(得分:2)

并非所有c ++方法都包装在Cython的cpplib中,但是使用already wrapped methods作为蓝图,可以很容易地包装缺少的功能-无需重新实现算法(无论多么简单)

例如:

%%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]