From 30c035234830c7fdb36841067e9f9ecb50c016b3 Mon Sep 17 00:00:00 2001 From: Blake Thompson Date: Mon, 10 Jun 2019 14:01:11 -0500 Subject: [PATCH] Added __contains__ to stl bindings for maps (#1767) * Added __contains__ to stl bindings for maps --- include/pybind11/stl_bind.h | 9 +++++++++ tests/test_stl.py | 2 ++ 2 files changed, 11 insertions(+) diff --git a/include/pybind11/stl_bind.h b/include/pybind11/stl_bind.h index 38dd68f69..d6f4c6332 100644 --- a/include/pybind11/stl_bind.h +++ b/include/pybind11/stl_bind.h @@ -579,6 +579,15 @@ class_ bind_map(handle scope, const std::string &name, Args&&. return_value_policy::reference_internal // ref + keepalive ); + cl.def("__contains__", + [](Map &m, const KeyType &k) -> bool { + auto it = m.find(k); + if (it == m.end()) + return false; + return true; + } + ); + // Assignment provided only if the type is copyable detail::map_assignment(cl); diff --git a/tests/test_stl.py b/tests/test_stl.py index bf185d57b..2335cb9fd 100644 --- a/tests/test_stl.py +++ b/tests/test_stl.py @@ -56,7 +56,9 @@ def test_map(doc): """std::map <-> dict""" d = m.cast_map() assert d == {"key": "value"} + assert "key" in d d["key2"] = "value2" + assert "key2" in d assert m.load_map(d) assert doc(m.cast_map) == "cast_map() -> Dict[str, str]"