使用自己的结构对向量进行排序

Sort Vector with own Struct

本文关键字:排序 向量 自己的 结构      更新时间:2023-10-16

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

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

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

Werte_rechts.push_back(Absatz_rechts());

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

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