Python 是C++;Cython支持的11个集装箱? Cython为我们提供了一个简单的导入C++标准库数据结构的方法,例如: from libcpp.vector cimport vector from libcpp.utility cimport pair

Python 是C++;Cython支持的11个集装箱? Cython为我们提供了一个简单的导入C++标准库数据结构的方法,例如: from libcpp.vector cimport vector from libcpp.utility cimport pair,python,c++,c++11,cython,c++-standard-library,Python,C++,C++11,Cython,C++ Standard Library,但是对于C++11中引入的较新容器:std::unordered\u map,std::unordered\u set等,它们是否以相同的方式得到支持?我找不到合适的导入语句。Cython默认不支持它们,但您可以按照的结构创建自己的接口 Cython现在支持无序地图和无序集 当前的cython版本允许它们 确保您的setup.py包含以下内容: ext_module = Extension( "foo", ["foo.pyx"], language="c++",

但是对于C++11中引入的较新容器:
std::unordered\u map
std::unordered\u set
等,它们是否以相同的方式得到支持?我找不到合适的导入语句。

Cython默认不支持它们,但您可以按照的结构创建自己的接口

Cython现在支持无序地图和无序集


当前的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:
/usr/local/lib/python2.7/dist packages/Cython/Compiler/Main.py:554:UserWarning:获得未知的编译选项,请删除:extra_link_args,extra_compile_args
(然后由于C++11相关错误而失败)。My setup.py看起来像:
ext_modules=cythonize('x.pyx',language='C++',)
@David您必须使用Extension()语法,而不是直接在cythonize()中指定参数。我必须添加“-stdlib=libc++”为了在Mac OSX 10.11.6和Ubuntu20.04、Cython版本0.29.23上实现这一功能,需要额外的编译参数,无需额外的设置。
from libcpp.unordered_map cimport unordered_map