我一直在尝试在这个网站上提供的每个提示,但没有一个有效,所以我将解释我的问题。
我要对包含对象指针的向量进行排序,因此我不能使用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;
}
答案 0 :(得分:0)
int main(){
Vertex v1(3), v2(2), v3(1);
vector<Vertex*> v;
v.push_back(&v1);
v.push_back(&v2);
v.push_back(&v3);
for(int i=0; i<3; i++) cout << (v.at(i))->getPond() << " "; cout << endl;
sort(v.begin(), v.end(), compareVertex);
for(int i=0; i<3; i++) cout << (v.at(i))->getPond() << " "; cout << endl;
return 0;
}
你的比较器功能,排序似乎工作正常。但是,Graph类中存在一些问题。我希望它可以帮助你缩小问题范围。
答案 1 :(得分:0)
您将顶点向量按值传递给sortVertexPond:
void Graph::sortVertexPond(vector<Vertex*> VertexVect)
因此,您在调用该函数时进行复制,然后对副本进行排序,但原件不会更改。
尝试通过引用传递矢量:
void Graph::sortVertexPond(vector<Vertex*>& VertexVect) // Note the '&'