К сожалению, эти функции должны быть объявлены как оператор () в классе. Как это:
class VertexSetHashFunction {
public:
::std::size_t operator ()(const ::std::set<Vertex3DXT*> &vertexSet) const;
};
class SetEqual {
public:
bool operator ()(const ::std::set<Vertex3DXT*> &a, const ::std::set<Vertex3DXT*> &b) const;
};
Вам не нужно изменять аргументы, чтобы они были константными ссылками, но я настоятельно рекомендую это сделать. Создание копии :: std :: set является относительно дорогим, и вы не должны делать это, если вам абсолютно не нужно.
Конечный констант только потому, что оператор вообще не изменяет состояние класса, в основном потому, что его нет. Просто приятно так сказать.
В качестве альтернативы, вы можете определить свою собственную специализацию шаблона :: std :: hash. На самом деле я бы порекомендовал это, если есть один стандартный способ, которым вы хотите, чтобы этот конкретный набор хэшировался, потому что этот шаблон используется по умолчанию, если вы не предоставляете хеш-функцию для unordered_map
или unordered_set
и что-либо еще, что требует хеш-функции. 1010 *