Я пробовал каждый совет, предоставленный на этом сайте, но никто не работал, поэтому я собираюсь объяснить, в чем моя проблема.std :: sort не сортирует вектор
Я являюсь tyring для сортировки вектора, содержащего указатели на объекты, поэтому couse Я не могу использовать синтаксис std::sort(vector.begin(), vector.end())
, потому что он будет использовать оператор «<» для указателей. Вот пример моего кода:
// Vertex.h
class Vertex
{
public :
inline int getPond() const {return m_Pond;}
private :
int m_Pond;
}
.
//Graph.h
class Graph
{
public :
void sortVertexPond(vector<Vertex*> VertexVect);
inline bool compareVertex(const Vertex* LeftVertex, const Vertex* RightVertex){return (LeftVertex->getPond() < RightVertex->getPond());}
void testFunct();
private :
vector<vector Vertex*>> m_VertexByLayers;
}
.
//Graph.cpp
#include <algorithm>
void Graph::sortVertexPond(vector<Vertex*> VertexVect)
{
std::sort(VertexVect.begin(), VertexVect.end(), compareVertex);
//std::sort(VertexVect.begin(), VertexVect.end(), compareVertexStruct());
}
/*struct compareVertexStruct {
bool operator()(Vertex* LeftVertex, Vertex* RightVertex) {return (LeftVertex->getPond() < RightVertex->getPond()); }
};*/
void testFunct()
{
this->sortVertexPond(m_VertexByLayers.at(0));
}
Это не будет компилироваться, как я получаю следующее сообщение об ошибке:
error C2780: 'void std::sort(_RanIt,_RanIt)' : 2 arguments expected - 3 provided
Как вы можете видеть в коде я представил, я уже пытался это сделать, создав Functor. Таким образом, я не добавляю проблем с компиляцией и запуском, что странно, что даже если мой функтор был вызван (что я мог видеть, добавляя cout внутри моего оператора), std :: sort ничего не сортировал.
Я имел такого рода результаты:
Input : [3,2,1]
3<2? 0
2<1? 0
Output : [3,2,1]
Input : [1,2,3]
1<2? 1
2<3? 1
Output : [1,2,3]
Может понравиться кто-нибудь помочь мне исправить это?
PS: Извините за мой английский, это не мой родной язык.
Редактировать: Спасибо всем. Вот что я сделал, чтобы исправить это.
//Graph.h
class Graph
{
public :
vector<Vertex*> sortVertexPond(vector<Vertex*> VertexVect);
}
//Graph.cpp
#include <algorithm>
struct compareVertexStruct {bool operator()(Vertex* LeftVertex, Vertex* RightVertex) {return (LeftVertex->getPond() < RightVertex->getPond());}};
vector<Vertex*> Graph::sortVertexPond(vector<Vertex*> VertexVect)
{
std::sort(VertexVect.begin(), VertexVect.end(), compareVertexStruct());
return VertexVect;
}
Я не проверил все это, но в функторе, вы сравниваете LeftVertex-> getPond() с самим собой. – MikMik
Спасибо за указание этой проблемы с опечаткой, исправлено. – Illmess