有没有办法在Cython中导入std :: find find_if等?

时间:2017-08-21 17:40:39

标签: c++ vector cython

是否可以导入std :: find,在libcpp.algorithm中我只发现非常有限的函数。现在我必须遍历矢量并进行比较。

1 个答案:

答案 0 :(得分:3)

您只需要遵循用于包装libcpp.algorithm中的其他功能的方案:

cdef extern from "<algorithm>" namespace "std":
    Iter find_if[Iter, Func](Iter first, Iter last, Func pred)

from libcpp.vector cimport vector
from libcpp cimport bool

cdef bool findtwo(int a):
    if a==2:
        return True


def test():
    cdef vector[int] v = [1,2,3,4,2]
    cdef vector[int].iterator found = find_if(v.begin(), v.end(), findtwo)
    if found != v.end():
        print("Found")

您会发现最大的限制是您可以作为谓词函数传递的内容:它必须是cdef函数,这意味着没有Python闭包,没有可调用的Python对象等。另外请注意,您返回的任何Python对象都将被解释为true(即不是nullptr),因此请务必按照我的说明返回C ++ bool。