在黑马程序员C++课程中list容器部分有一个案例:将Person自定义数据类型进行排序,Person中属性有姓名、年龄、身高;排序规则为按年龄升序,且当年龄相同时按照身高降序。
起初我先是创建Person类,然后我打算用一个赋值函数去赋值并打印数据:
class Person {
public:
Person(string name, int age, int height) {
this->m_name = name;
this->m_age = age;
this->m_height = height;
}
string m_name;
int m_age;
int m_height;
};
//赋值
void creatperson(list<Person>L){
string nameseed = "ABCDEFG";
for (int i = 0; i < 7; i++)
{
string name = "人物";
name += nameseed[i];
int age = 0;
age = rand() % 16 + 20;
int height = 0;
height = rand() % 41 + 150;
Person p(name, age, height);
L.push_back(p);
}
//show
cout << "排序前顺序:" << endl;
for (list<Person>::iterator lit = L.begin(); lit != L.end(); lit++) {
cout << "姓名:" << lit->m_name << "年龄:" << lit->m_age << "身高:" << lit->m_height << endl;
}
}
然后并用另一个函数按照排序规则进行排序:
//排序规则
bool my_compare(Person &p1,Person &p2) {
if (p1.m_age == p2.m_age)
{
return p1.m_height > p2.m_height;
}
else {
return p1.m_age < p2.m_age;
}
}
//排序并打印
void mysort(list<Person>L) {
L.sort(my_compare);
cout << "排序后顺序:" << endl;
for (list<Person>::iterator it = L.begin(); it != L.end(); it++) {
cout << "姓名:" << it->m_name << "年龄:" << it->m_age << "身高:" << it->m_height << endl;
}
}
我发现打印的时候排序函数里面打印不到数据,然后我把排序函数整个内容搬到main()里,还是无法正常输出,但是在我把这些全部合并成一个函数后,就能够正常输出打印,所以我推测赋值函数中的L和排序函数中的L之间并没有关联到一起。
所以我想请教一下大家,如何在不整合的情况下在排序函数里调用赋值函数里L的数据?