2016-06-01 14 views
0

ich so etwas wie diese:C++ unordered_set Vergleichsfunktion für eine benutzerdefinierte Klasse

using namespace std; 
class QuadraticPrimeSolution 
{ 
    private: 
     int a; 
     int b; 
     int numberOfPrimes; 
     bool isPrime(int n, set<int> &primeHash); 
    public: 
     QuadraticPrimeSolution(int a, int b):a(a),b(b),numberOfPrimes(0){}; 
     void calculateNumberOfPrimes(set<int> &primeHash); 

     int getNumberOfPrimes(){return numberOfPrimes;} 
}; 




class QuadraticPrimeSolver 
{ 
    private: 
     struct classcomp { 
      bool operator() (QuadraticPrimeSolution& lhs, QuadraticPrimeSolution& rhs) 
      { 
      return lhs.getNumberOfPrimes()>rhs.getNumberOfPrimes(); 
      } 
     }; 
     set<QuadraticPrimeSolution, classcomp> solutions; 
     set<int> primeHash; 
     QuadraticPrimeSolution getMaxSolution(); 
     int a; 
     int b; 

    public: 

     QuadraticPrimeSolver(int a, int b):a(a), b(b){}; 
     void solve(); 

}; 

bool QuadraticPrimeSolution::isPrime(int n, set<int> &primeHash) 
{ 
    if(primeHash.empty()) 
    { 
     primeHash.insert(n); 
     return true; 
    } 
    for(auto it= primeHash.begin(); it!= primeHash.end(); it++) 
    { 
     if(n%(*it)==0) 
     { 
      return false; 
     } 
    } 
    primeHash.insert(n); 
    return true; 
} 


void QuadraticPrimeSolver::solve() 
{ 
    for(int i=(-1)*a; i<=a; i++) 
    { 
     for(int j=(-1)*b; j<=b; j++) 
     { 
      QuadraticPrimeSolution aSolution = new aSolution(i,j); 
      aSolution.calculateNumberOfPrimes(primeHash); 
      solutions.insert(aSolution); 
     } 
    } 

} 
int main() 
{ 
    QuadraticPrimeSolver QPS(0,40); 
    QPS.solve(); 
} 

Im Grunde, was ich versuche, Compute zu tun ist, und speichere jedes QuadraticPrimeSolution in eine Hash-Tabelle in QuadraticPrimeSolver, wo ich dann Zugang später.

Meine Frage ist, ist meine Komparatorimplementierung korrekt? Im Moment beschwert sich Compiler über meinen Komparator und die folgende Zeile zum Einfügen in einen Satz.

solutions.insert(aSolution); 

Bitte helfen!

+1

Possible Duplikat [Problem Sortierelementfunktion als Komparator verwendet] (http://stackoverflow.com/questions/1902311/problem-sorting-using-member-function-as-comparator) – user657267

+3

'unordered_set' ist ungeordnet. Vielleicht möchten Sie 'std :: set'. – songyuanyao

Antwort

0
class building 
{ 
public: 
    int getPosition() const {return position;}; 
private: 
    int height; 
    int position; 
}; 

class ManyBuildings 
{ 
public: 
    void populateBuildings(std::vector<std::string> buildings); 
private: 
    class comparePosition { 
    public: 
     bool operator() (const building &lhs, const building &rhs) { 
      return lhs.getPosition() > rhs.getPosition(); 
     } 
    }; 
    std::set<building, comparePosition> buildings; 

}; 
  • Verwendung set anstelle von unordered_set
  • Template-Parameter für set sollte ein Typ sein, nicht eine Funktion
+0

Dieser Komparator benötigt mehr "const". –