我一直在尝试这个网站上提供的每一个技巧,但没有一个奏效,所以我将解释我的问题是什么。
我很想对包含指向对象的指针的向量进行排序,所以我不能使用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;
}