diff --git a/CMakeLists.txt b/CMakeLists.txt
index aaeb42034749a7566798b2b0dda4589d2ac2b1fb..cb2c664c7e61702081fc6b5efedb08ae30dbe4d7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -90,6 +90,11 @@ if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSI
 	list(APPEND vkcv_definitions __NO_SEMAPHORES__)
 endif()
 
+if (((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "4.0.0")) OR
+	((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.0.0")))
+	list(APPEND vkcv_definitions VKCV_UNORDERED_CONTAINER)
+endif()
+
 # configure everything to use the required dependencies
 include(${vkcv_config}/Libraries.cmake)
 
diff --git a/include/vkcv/Container.hpp b/include/vkcv/Container.hpp
index 20c79557e6faa6d4e6d735cec8d89159357ddfd3..56e1199c2e1a6a85362de402adf503214c8bb6ba 100644
--- a/include/vkcv/Container.hpp
+++ b/include/vkcv/Container.hpp
@@ -6,18 +6,36 @@
  */
 
 #include <vector>
+
+#ifdef VKCV_UNORDERED_CONTAINER
 #include <unordered_map>
 #include <unordered_set>
+#else
+#include <map>
+#include <set>
+#endif
 
 namespace vkcv {
 	
-	template<typename K, typename V>
-	using Dictionary = std::unordered_map<K, V>;
-	
 	template<typename T>
 	using Vector = std::vector<T>;
+
+#ifdef VKCV_UNORDERED_CONTAINER
 	
+	template<typename K, typename V>
+	using Dictionary = std::unordered_map<K, V>;
+
 	template<typename T>
 	using Set = std::unordered_set<T>;
+
+#else
+	
+	template<typename K, typename V>
+	using Dictionary = std::map<K, V>;
 	
+	template<typename T>
+	using Set = std::set<T>;
+
+#endif
+
 }