微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Cython 中将 std:set 迭代器增加一个以上?

如何解决如何在 Cython 中将 std:set 迭代器增加一个以上?

我有一个 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 举报,一经查实,本站将立刻删除。