是否可以导入std :: find,在libcpp.algorithm
中我只发现非常有限的函数。现在我必须遍历矢量并进行比较。
答案 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。