Я пытался реализовать алгоритм Крускала (реализация Введение в алгоритмы CLRS), используя C ++. Но при попытке отсортировать набор Edge (который является классом, который я создал) (который я реализовал как вектор) с использованием std :: sort, он не работает.
Я пытался использовать лямбда-функцию в качестве компаратора, а также перегруженный оператор «<». </p>
std::vector <Edge> givenEdgeSet;
Это вызов функции
std::sort(givenEdgeSet.begin(), givenEdgeSet.end());
И определение перегруженного оператора:
bool operator < (const Edge& b){
//length is the edge length here..
return (length < b.length);
}
Проблема заключается в обмене объектами в векторе
(чего не происходит)
Я определил конструкторы копирования и перемещения и операторы присваивания
Может ли быть проблема в конструкторах?
// Копировать конструктор
Edge(const Edge& e){
start_point = e.start_point;
end_point = e.end_point;
length = e.length;
start_vertex_set = e.start_vertex_set;
end_vertex_set = e.end_vertex_set;
}
// копировать оператор присваивания
Edge& operator = (const Edge& e){
std::shared_ptr<Edge> NewEdge(new Edge());
NewEdge->start_point = e.start_point;
NewEdge->end_point = e.end_point;
NewEdge->length = e.length;
NewEdge->start_vertex_set = e.start_vertex_set;
NewEdge->end_vertex_set = e.end_vertex_set;
return *NewEdge;
}
// Конструктор перемещения
Edge(const Edge&& e){
start_point = e.start_point;
end_point = e.end_point;
length = e.length;
start_vertex_set = e.start_vertex_set;
end_vertex_set = e.end_vertex_set;
}
// Оператор присваивания перемещения
Edge& operator = (const Edge&& e){
std::shared_ptr<Edge> NewEdge(new Edge());
NewEdge->start_point = e.start_point;
NewEdge->end_point = e.end_point;
NewEdge->length = e.length;
NewEdge->start_vertex_set = e.start_vertex_set;
NewEdge->end_vertex_set = e.end_vertex_set;
return (*NewEdge);
}