永发信息网

C++ merge函数为什么不对

答案:1  悬赏:0  手机版
解决时间 2021-03-10 11:38
  • 提问者网友:太高姿态
  • 2021-03-10 00:59
#include<iostream>
#include<string>
#include<algorithm>
#include<list>
using namespace std;
class worker{
private:
string name;
int age;
double salary;
public:
worker(string _name,int _age,double _salary):name(_name),age(_age),salary(_salary){}
void SetData(string Name,int Age,double wage)
{
name=Name; age=Age;salary=wage;
}
string getName() const {return name;}
int getAge()const {return age;}
double getSalary()const {return salary;}
worker(const worker &w)
{
name=w.getName(); age=w.getAge();salary=w.getSalary();
}
void display()
{
cout<<"ÐÕÃû£º"<<name<<" ÄêÁ䣺"<<age<<" ¹¤×Ê£º"<<salary<<endl;
}
};
int main()
{
worker w1("zhangsan",25,1500),w2("lisi",24,3000),w3("wangwu",30,4500);
list<worker> L1,L2;
list<worker> ::iterator p;
L1.push_back(w1);
L1.push_back(w2);
L1.push_back(w3);
worker wo1("wangming",33,3300),wo2("wangxiaoming",34,3400),wo3("wangdaming",35,3500);
L2.push_back(wo1);
L2.push_back(wo2);
L2.push_back(wo3);
for(p=L1.begin();p!=L1.end();p++)
{
worker w(*p);
w.display();
}
L1.merge(L2);//将L2合并到L1,为什么不对?怎么改?
for(p=L1.begin();p!=L1.end();p++)
{
worker w(*p);
w.display();
}
}
最佳答案
  • 五星知识达人网友:十年萤火照君眠
  • 2021-03-10 02:15
首先,merge()函数调用前必须保L1,L2是有序的,然后才能调用merge()函数。
所以应该做两处更改:
1.在worker类的公有函数中添加以下 定义排序准则的函数。
bool operator<(const worker & kk)
{
return this->age < kk.getAge();
}
2.在调用L1.merge(L2)的前面添加以下两行。

L1.sort();
L2.sort();

这样程序就可以正常运行,并输出正确答案了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯