diff --git a/src/core/cell/Cell.h b/src/core/cell/Cell.h
index 11fa7d1d1470084c6a6701bb3e9011b771270b22..8fc8ef14e29f216f173604b667807801b49e4f83 100644
--- a/src/core/cell/Cell.h
+++ b/src/core/cell/Cell.h
@@ -381,3 +381,15 @@ namespace mpi
 
 
 } // namespace walberla
+
+namespace std
+{
+   template<>
+   struct hash< walberla::Cell >
+   {
+      std::size_t operator()( walberla::Cell const & cell ) const noexcept
+      {
+         return walberla::cell::hash_value( cell );
+      }
+   };
+} // namespace std
diff --git a/src/core/math/Vector2.h b/src/core/math/Vector2.h
index b62d58f4651a743e33a0b9c6f0e4f7c860d174dd..b0decf8ec0a2953fc2a2c3ab3a9e8c619de99e60 100644
--- a/src/core/math/Vector2.h
+++ b/src/core/math/Vector2.h
@@ -1689,3 +1689,15 @@ namespace walberla {
    };
 
 } // namespace walberla
+
+namespace std
+{
+    template<typename T>
+    struct hash< walberla::Vector2<T> >
+    {
+        std::size_t operator()( walberla::Vector2<T> const & v ) const noexcept
+        {
+            return walberla::Vector2<T>::hash_value( v );
+        }
+    };
+} // namespace std
diff --git a/src/core/math/Vector3.h b/src/core/math/Vector3.h
index 267e90c38f7b9752820a8397d7729c36134e3c96..7bc9e87af1f534aa694f1c8302dd4b9124b15a2b 100644
--- a/src/core/math/Vector3.h
+++ b/src/core/math/Vector3.h
@@ -1969,3 +1969,15 @@ inline bool check_float_equal_eps( const math::Vector3<real_t> & lhs, const math
 }
 }
 }
+
+namespace std
+{
+    template<typename T>
+    struct hash< walberla::Vector3<T> >
+    {
+        std::size_t operator()( walberla::Vector3<T> const & v ) const noexcept
+        {
+            return walberla::Vector3<T>::hash_value( v );
+        }
+    };
+} // namespace std