Cython 是否支持 C++11 个容器

Are C++11 containers supported by Cython?

本文关键字:C++11 是否 支持 Cython      更新时间:2023-10-16

Cython为我们提供了一种导入C++标准库数据结构的简单方法,例如:

  from libcpp.vector cimport vector
    from libcpp.utility cimport pair

但是C++11引入的新容器呢:std::unordered_mapstd::unordered_set等。它们是否以相同的方式得到支持?我找不到合适的导入语句。

当前的cython版本允许它们。

确保您的setup.py包含以下内容:

ext_module = Extension(
    "foo",
    ["foo.pyx"],
    language="c++",
    extra_compile_args=["-std=c++11"],
    extra_link_args=["-std=c++11"]
)

然后,您可以使用

from libcpp.unordered_map cimport unordered_map

就像任何其他 STL 类一样。

Cython默认不支持它们,但你可以按照 https://github.com/cython/cython/blob/master/Cython/Includes/libcpp/map.pxd 的结构创建自己的界面。

Cython 现在从 0.20.2 开始支持 unordered_map 和 unordered_set。

from libcpp.unordered_map cimport unordered_map
from libcpp.unordered_set cimport unordered_set