このサイトで提供されているすべてのヒントを試してみましたが、どれもうまくいきませんでしたので、私の問題が何であるかを説明します.
オブジェクトへのポインターを含むベクターを並べ替えようとしていますが、ポインターに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;
}