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!
Possible Duplikat [Problem Sortierelementfunktion als Komparator verwendet] (http://stackoverflow.com/questions/1902311/problem-sorting-using-member-function-as-comparator) – user657267
'unordered_set' ist ungeordnet. Vielleicht möchten Sie 'std :: set'. – songyuanyao