【问题标题】:c++ unordered_set Comparator function for a user-defined classc++ unordered_set 用户定义类的比较器函数
【发布时间】:2016-06-01 02:17:25
【问题描述】:

我有这样的事情:

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();
}

基本上,我要做的是计算每个 QuadraticPrimeSolution 并将其存储到 QuadraticPrimeSolver 中的哈希表中,然后我可以稍后访问该哈希表。

我的问题是,我的比较器实现是否正确?现在编译器正在抱怨我的比较器,以及用于插入集合的以下行。

solutions.insert(aSolution);

请帮忙!

【问题讨论】:

标签: c++ stl comparator unordered-set


【解决方案1】:
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;

};
  • 使用set 而不是unordered_set
  • set 的模板参数应该是一个类型,而不是一个函数

【讨论】:

  • 那个比较器需要更多const
猜你喜欢
  • 2021-03-23
  • 1970-01-01
  • 2019-03-18
  • 2021-01-14
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 2012-05-02
  • 2021-07-12
相关资源
最近更新 更多