矢量排序 - c ++

时间:2012-03-15 22:51:21

标签: c++

我有一个存储Node *的向量。 Node具有成员属性:row,col,value。在我的向量中,我已经将它连接到同一行中的所有节点*但不一定是正确的列顺序。所以基本上我想对它进行排序,以便它真正处于行主要形式。现在,每个“行”中的列都是乱序的。我感谢您给予的任何帮助!

编辑:

这是我按行排序矢量的方法。有没有办法对列进行额外排序?

    vector<Node*> vect;
    int i,j,minIndex;
    Node* temp = new Node(NULL,NULL,0,0,0);
    for(i=0;i<vect.size()-1;i++)
    {
        minIndex = i;
        for(j=i+1;j<vect.size();j++)
        {
            if(vect.at(j)->row<vect.at(minIndex)->row)
            {
                minIndex = j;
            }
        }
        if(minIndex!=i)
        {
            temp = vect.at(i);
            vect.at(i) = vect.at(minIndex);
            vect.at(minIndex) = temp;
        }
    }

1 个答案:

答案 0 :(得分:2)

您不需要在此处实现自己的排序算法。您可以使用标准模板库的sort()方法,然后覆盖默认行为以对Node *向量进行排序。

// This returns true if Node* a should be considered "less than" Node* b.
    struct less_node : binary_function <Node*,Node*,bool> 
    {
        bool operator() (const Node*& a, const Node*& b) const
        {
                // sort by row first
            if (a->row < b->row)  
                return true;
                // then sort by col within each row
            if (a->row == b->row && a->col < b->col)
                return true;
            return false;
        }
    };

一旦定义了这个less_node结构,你就可以调用:

sort(vect.begin(), vect.end(), less_node());