用自己的Struct排序矢量

时间:2015-01-27 09:59:06

标签: c++ vector struct

我的矢量有我自己的结构类型:

struct Absatz_rechts{
    xint yniedrig;
    xint xhoch;
    xint xniedrig;
};

vector<Absatz_rechts> Werte_rechts(Gruppen.size());
Werte_rechts.push_back(Absatz_rechts());

现在我想对矢量进行排序

for (i = 0; i < Gruppen.size(); i++)
{
    cout << Werte_rechts[i].yniedrig << endl;
    cout << Werte_rechts[i].xhoch << endl;
    cout << Werte_rechts[i].xniedrig << endl;
    cout << endl << endl << endl;
}

发出:

10
75
35

12
35
0

8
75
55

现在排序:

bool compName(const Absatz_rechts &left, const Absatz_rechts &right)
{
    return (left.yniedrig < right.yniedrig);
}; 

sort(Werte_rechts.begin(), Werte_rechts.end(), compName);

问题在于新输出:

0
0
0

8
75
55

10
75
35

为什么前三个现在填充零?

1 个答案:

答案 0 :(得分:2)

Werte_rechts.push_back(Absatz_rechts());

这会附加一个值构造的对象,其字段都为零。

排序后,这将是第一个元素,因此当您遍历矢量以打印它时,它将首先出现。由于您只打印了第一个Gruppen.size(),并且总大小(包括您附加的零值)是Gruppen.size()+1,因此您不会看到最后一个元素。