Cython gives us an easy way to import C++ standard library data structures, e.g.:
from libcpp.vector cimport vector
from libcpp.utility cimport pair
But what about newer containers introduced with C++11: std::unordered_map
, std::unordered_set
etc. Are they supported in the same way? I could not find the appropriate import statement.
Cython can call into both C and C++ code, and even subclass C++ classes. The C++ support is somewhat limited, though, given how complex the C++ language is.
You need to add this path only if you use cimport numpy . With older Cython releases, setting this macro will fail the C compilation, because Cython generates code that uses this deprecated C-API.
Unlike most Python software, Cython requires a C compiler to be present on the system. The details of getting a C compiler varies according to the system used: Linux The GNU C Compiler (gcc) is usually present, or easily available through the package system.
Cython is a compiled language that is typically used to generate CPython extension modules.
Current cython versions allow them.
Make sure your setup.py
contains something like:
ext_module = Extension(
"foo",
["foo.pyx"],
language="c++",
extra_compile_args=["-std=c++11"],
extra_link_args=["-std=c++11"]
)
You can then use
from libcpp.unordered_map cimport unordered_map
like for any other STL class.
Cython doesn't support them by default, but you could probably create your own interface, following the structure of https://github.com/cython/cython/blob/master/Cython/Includes/libcpp/map.pxd.
Cython now supported unordered_map and unordered_set since 0.20.2.
from libcpp.unordered_map cimport unordered_map
from libcpp.unordered_set cimport unordered_set
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With