问题描述
我有一个 C++ std:set,我想在 Cython 中为其实现“假”索引。假设我有一个包装集合的扩展类型,我想要一个方法 get_member(int i)
返回集合中的第 i 个元素。这就是我得到的,基本上使用 cython.operator.preincrement
迭代集合,直到达到所需的点,然后取消引用当前迭代器位置:
# distutils: language = c++
from cython.operator cimport dereference,preincrement
from libcpp.set cimport set as cppset
cdef class SetWrapper:
cdef cppset[int] _set
def __cinit__(self,s: set = None):
if s is not None:
self._set = s
cpdef int get_member(self,int i):
cdef cppset[int].iterator it = self._set.begin()
cdef int count
# Would it be possible to increment it directly by i?
for count in range(i):
preincrement(it)
return dereference(it)
test_set = SetWrapper({1,2,3})
test_set.get_member(2)
# 3
虽然这行得通,但当可以直接通过 i
位置递增迭代器时,总是迭代集合似乎有点浪费。这在某种程度上可能吗?
PS:让我们抛开这样一个事实,即这不是人们应该使用集合来...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)