+#include <vector>
+#include <string>
+#include <ext/hash_map>
+
+typedef std::vector<std::string> Literals;
+typedef __gnu_cxx::hash_map<std::string,bool> Preconditions;
+typedef __gnu_cxx::hash_map<int,Literals> EffectsMap;
+
+namespace __gnu_cxx {
+
+ template< typename CharT, typename Traits, typename Alloc >
+ struct hash< std::basic_string<CharT, Traits, Alloc> > {
+ size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
+
+ size_t hash = 0;
+ for (unsigned int i = 0; i < s.size(); ++i)
+ hash += static_cast<size_t>(s[i]);
+ return hash + s.size();
+
+ }
+
+ };
+
+ template< typename CharT, typename Traits, typename Alloc >
+ struct hash< const std::basic_string<CharT, Traits, Alloc> > { //yes you need this version aswell!
+
+ size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
+
+ size_t hash = 0;
+ for (unsigned int i = 0; i < s.size(); ++i)
+ hash += static_cast<size_t>(s[i]);
+ return hash + s.size();
+ }
+
+ };
+};