我有一个存储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;
}
}
答案 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());