dimanche 2 juillet 2017

Hash function to return struct

I have a std::unordered_multimap that is defined as:

typedef std::unordered_multimap<Index, Point> PointMap;

Where Index is a struct defined as:

struct Index {
    int i, j, k;
};

And Point is also a struct defined as:

struct Point {
    int x, y, z;

    long distanceSq(const Point& p) const;
};

I am trying to define a function that will hash a given Point and return an Index as the key for the std::unordered_multimap. In order to do that however, I need to use a variable D that is part of a class called StarCounter. It is defined as:

class StarCounter {

    std::vector<Point> stars;
    int N;
    int D;
    long Dsq;



public:
    StarCounter (int n, int d, std::istream& in);

    long countPairs();

private:
    long rangeCount (const Point& star, const PointMap& cubes);

    Index getCubeIndex(const Point& star) const;
};

Now ideally, the getCubeIndex() function returns exactly what I want to hash:

Index StarCounter::getCubeIndex(const Point& star) const
{
    Index result{star.x / D,
        star.y / D,
        star.z / D};
    return result;
}

Because it returns an Index and my std::unordered_multimap has key vales that are Index's; such that I can do mymm[i, j, k].

However, since the StarCounter class has no hash function in its definition, and I am unable to add one (yes this is for practice), I cannot seem to call D or getCubeIndex() from say:

Index starHash(const Point& star) {
    return getCubeIndex(star); // because StarCounter::starHash isnt defined
}

or

Index starHash(const Point& star) {
    Index ind {
        star.x / D, // D is a member of StarCounter, again not callable
        star.y / D,
        star.z / D,
    };
}

Am I going about this the wrong way for hashing the Point to return an Index key value?

Aucun commentaire:

Enregistrer un commentaire