Я хочу инструмент для удаления повторяющихся узлов («узлы» в смысле конечного элемента, просто точки в пространстве с определенными координатами). В принципе, я хочу иметь возможность брать коллекцию узлов и сокращать ее за счет исключения дополнительных узлов, которые находятся в пределах определенного допуска на расстоянии других узлов. Я полагаю, что набор узлов STL, отсортированный по координате, подойдет к биту с хорошей производительностью. Мой вопрос заключается в том, как включить допуск, который можно установить во время выполнения.Использование устанавливаемого допуска в объекте сравнения для набора STL
Рассмотрим простую функцию сравнения клавиш для 1D-случая (единственная координата на узел). Я знаю, что моя логика может быть сокращена; это не то, о чем мой вопрос.
struct NodeSorter_x{
//Stores Node objects sorted by x coordinate within tolerance TOL
bool operator()(const Node N1, const Node N2) const
{
//returns true if N1 < N2 and not within TOL distance
return (N1.x < N2.x) && !(fabs(N1.x - N2.x) < TOL);
}
};
И набор, содержащий уникальные объекты-узлы (без дубликатов) ...
std::set <Node,NodeSorter_x> UniqueNodeSet;
Итак, я хочу, чтобы иметь возможность установить TOL, используемый в сравнении во время выполнения. Как мне это сделать?
Ahh, конструктор для объекта сравнения. Имеет смысл. Я предполагаю, что есть способ получить к нему доступ после создания UniqueNodeSet, чтобы изменить допуск. Глядя на документацию stl, похоже, что это будет нечто вроде UniqueNodeSet.key_compare.setTolerance (val), предполагая, что в NodeSorter_x существуют соответствующие memebers. –