Я хочу использовать stdext::hash_set
для пользовательского типа.
На самом деле я понял, как это сделать, но я не уверен, что это правильно (это компилируется, новыглядит несколько грязно).
Код выглядит следующим образом:
// This is my custom type
struct Point
{
Point(int _x, int _y, int _z) : x(_x), y(_y), z(_z) {}
int x, y, z;
bool operator< (const Point& other) const
{
if (x != other.x) return x < other.x;
if (y != other.y) return y < other.y;
return z < other.z;
}
};
// helper class
struct PointHashCompare {
// value is copied from MS sources
static const int bucket_size = 1;
size_t operator() (const Point& p) const {
return p.x * 31 * 31 + p.y * 31 + p.z;
}
bool operator() (const Point& a, const Point& b) const {
return a < b;
}
};
И объявление переменной следующее:
stdext::hash_set<Point, PointHashCompare> hSet;
Что означает bucket_size
в PointHashCompare
имеется в виду? Существует ли какая-либо документация Microsoft, которая объясняет bucket_size
и предложения по ее значению и зачем она вообще нужна?
(могу предположить, что это связано с внутренней структурой хэшареализации, но могут использоваться разные подходы, которые также могут быть изменены в разных версиях VC ++)
Я также подумываю перейти на std::unordered_set
, но теперь мне интересно, как управлять с stdext::hash_set
Спасибо!