std :: sort不会对矢量进行排序

时间:2012-06-15 09:47:46

标签: visual-c++

我一直在尝试在这个网站上提供的每个提示,但没有一个有效,所以我将解释我的问题。

我要对包含对象指针的向量进行排序,因此我不能使用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;
}

2 个答案:

答案 0 :(得分:0)

你似乎错过了冒号 void Graph:sortVertexPond(vector VertexVect) 这里。图表之后:&lt; -

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 '&'