diff --git a/include/pybind11/stl_bind.h b/include/pybind11/stl_bind.h index 38dd68f695..d6f4c6332e 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 bf185d57b5..2335cb9fdf 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]"