--- azove.cpp.orig	2020-03-18 16:24:44.740182853 -0600
+++ azove.cpp	2020-03-18 16:36:01.379150406 -0600
@@ -212,8 +212,8 @@ azove::~azove(){
     delete[] sigMDDnodeBase;
   for(vector<conBDD*>::iterator Vit = conBDDs.begin(); Vit != conBDDs.end(); ++Vit)
     delete *Vit;
-  for(vector<__gnu_cxx::hash_multimap<unsigned long int, andBDDnode*> >::iterator Vit = levels.begin(); Vit != levels.end(); ++Vit)
-    for(__gnu_cxx::hash_multimap<unsigned long int, andBDDnode*>::iterator Lit = Vit->begin(); Lit != Vit->end(); ++Lit)
+  for(vector<unordered_multimap<unsigned long int, andBDDnode*> >::iterator Vit = levels.begin(); Vit != levels.end(); ++Vit)
+    for(unordered_multimap<unsigned long int, andBDDnode*>::iterator Lit = Vit->begin(); Lit != Vit->end(); ++Lit)
       delete Lit->second;
 }
 
@@ -422,7 +422,7 @@ void azove::countPathsToLeaf1(void){
     rootNode->counter *= 2;
   
   for(unsigned int l=0; l<dim; ++l){
-    for(__gnu_cxx::hash_multimap<unsigned long int, andBDDnode*>::iterator it = levels[l].begin(); it != levels[l].end(); ++it){
+    for(unordered_multimap<unsigned long int, andBDDnode*>::iterator it = levels[l].begin(); it != levels[l].end(); ++it){
       it->second->zeroEdge->counter += it->second->counter / 2;
       it->second->oneEdge->counter += it->second->counter / 2;
     }
@@ -437,9 +437,9 @@ void azove::countPathsToLeaf1(void){
 andBDDnode* azove::findNodeWithSameSuccessors(const int actLevel, const andBDDnode* actZeroEdge, const andBDDnode* actOneEdge){
   andBDDnode* foundNode = NULL;
   
-  pair<__gnu_cxx::hash_multimap<unsigned long int, andBDDnode*>::iterator, __gnu_cxx::hash_multimap<unsigned long int, andBDDnode*>::iterator> sameZeroSonsRange = levels[actLevel].equal_range((unsigned long int)actZeroEdge);
+  pair<unordered_multimap<unsigned long int, andBDDnode*>::iterator, unordered_multimap<unsigned long int, andBDDnode*>::iterator> sameZeroSonsRange = levels[actLevel].equal_range((unsigned long int)actZeroEdge);
   
-  for(__gnu_cxx::hash_multimap<unsigned long int, andBDDnode*>::iterator searchIt = sameZeroSonsRange.first; searchIt != sameZeroSonsRange.second; ++searchIt){
+  for(unordered_multimap<unsigned long int, andBDDnode*>::iterator searchIt = sameZeroSonsRange.first; searchIt != sameZeroSonsRange.second; ++searchIt){
     if(actOneEdge == searchIt->second->oneEdge){
       foundNode = searchIt->second;
       break;
@@ -465,7 +465,7 @@ void azove::outputBDD(void){
   cerr<<"levels of BDD"<<endl;
   for(unsigned int l=0; l<=dim; ++l){
     cerr<<"========= level "<<l<<" ==========="<<endl;
-    for(__gnu_cxx::hash_multimap<unsigned long int, andBDDnode*>::const_iterator it = levels[l].begin(); it != levels[l].end(); ++it)
+    for(unordered_multimap<unsigned long int, andBDDnode*>::const_iterator it = levels[l].begin(); it != levels[l].end(); ++it)
       cerr<<*(it->second);
   }
 }
@@ -597,7 +597,7 @@ void azove::outputDotFile(const char* fi
   for(unsigned int l=0; l<dim; ++l){
     unsigned int abusedCounter = 0;
     of<<"{ rank = same; \" "<<level2index[l]<<" \";"<<endl;
-    for(__gnu_cxx::hash_multimap<unsigned long int, andBDDnode*>::iterator it = levels[l].begin(); it != levels[l].end(); ++it){
+    for(unordered_multimap<unsigned long int, andBDDnode*>::iterator it = levels[l].begin(); it != levels[l].end(); ++it){
       it->second->counter = abusedCounter++;
       of<<"\""<<l<<"_"<<it->second->counter<<"\";"<<endl;
     }
@@ -611,7 +611,7 @@ void azove::outputDotFile(const char* fi
     <<"}"<<endl;
   
   for(unsigned int l=0; l<dim; ++l){
-    for(__gnu_cxx::hash_multimap<unsigned long int, andBDDnode*>::iterator it = levels[l].begin(); it != levels[l].end(); ++it){
+    for(unordered_multimap<unsigned long int, andBDDnode*>::iterator it = levels[l].begin(); it != levels[l].end(); ++it){
       of<<"\""<<it->second->level<<"_"<<it->second->counter<<"\" -> ";
       if(it->second->oneEdge == leaf0Node)
         of<<"\"leaf0\"";
--- azove.hpp.orig	2007-03-01 09:12:27.000000000 -0700
+++ azove.hpp	2020-03-18 16:39:17.921850480 -0600
@@ -25,7 +25,7 @@
 #include <stdio.h>
 #include <vector>
 #include <list>
-#include <ext/hash_map>
+#include <unordered_map>
 #include <numeric>
 
 #include "conBDD.hpp"
@@ -75,7 +75,7 @@ private:
   unsigned long int sigMDDnodeBaseCounter;
   
   //data structure for the andBDD  
-  std::vector<__gnu_cxx::hash_multimap<unsigned long int, andBDDnode*> > levels;
+  std::vector<std::unordered_multimap<unsigned long int, andBDDnode*> > levels;
 
   andBDDnode* rootNode;
   andBDDnode* leaf0Node;
