Cython-遍历地图

时间:2018-08-04 13:37:19

标签: python cython

我想知道是否有可能直接通过Cython代码(即.pyx中的 ie )遍历地图。 这是我的示例:

import cython
cimport cython
from licpp.map import map as mapcpp

def it_through_map(dict mymap_of_int_int):
  # python dict to map
  cdef mapcpp[int,int] mymap_in = mymap_of_int_int
  cdef mapcpp[int,int].iterator it = mymap_in.begin()

  while(it != mymap.end()):
    # let's pretend here I just want to print the key and the value
    print(it.first) # Not working
    print(it.second) # Not working
    it ++ # Not working

这不能编译:{{1​​}}

我以前在cpp中使用过地图容器,但对于此代码,我试图坚持使用cython / python,这可能吗?

由DavidW解决 这是代码的工作版本,遵循DavidW的答案:

Object of type 'iterator' has no attribute 'first'

1 个答案:

答案 0 :(得分:4)

地图迭代器没有元素firstsecond。相反,它有一个operator*,它返回一个pair引用。在C ++中,您可以一次性使用it->first来执行此操作,但是该语法在Cython中不起作用(并且不够智能,因此决定使用->而不是.本身)。

相反,您使用cython.operator.dereference

from cython.operator cimport dereference

# ...

print(dereference(it).first)

类似地,it++可以用cython.operator.postincrement

完成