5

指定された文字列の文字列の STL ベクトルを検索し、見つかった場合は true、そうでない場合は false を返す関数を cython で作成しました。ここではパフォーマンスが非常に重要です。理想的には、データ型ごとに関数を記述する必要がないように、同じことを行うテンプレート化された関数が必要です。これは可能だと確信していますが、テンプレート化された関数の cython 構文がわかりません。(私はC ++でそれを行う方法を知っています)

from libcpp cimport bool
from libcpp.string cimport string
from libcpp.vector cimport vector
from cython.operator cimport dereference as deref, preincrement as inc

cpdef bool is_in_vector(string a, vector[string] v):
    cdef vector[string].iterator it = v.begin()
    while it != v.end():
        if deref(it) == a:
            return True
        #Increment iterator
        inc(it)
    return False

誰か手を貸してくれませんか?

4

1 に答える 1

2

融合型を使用します。

例:

cimport cython

ctypedef fused any:
    string
    cython.int

cpdef bool is_in_vector(string a, vector[any] v)

またはこの方法:

ctypedef fused vector_t:
    vector[string]
    vector[cython.int]

cpdef bool is_in_vector(string a, vector_t v)
于 2012-11-09T15:55:41.427 に答える