永发信息网

C++ merge函数为什么不对

答案:1  悬赏:0  手机版
解决时间 2021-03-10 11:38
#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();
}
}
最佳答案
首先,merge()函数调用前必须保L1,L2是有序的,然后才能调用merge()函数。
所以应该做两处更改:
1.在worker类的公有函数中添加以下 定义排序准则的函数。
bool operator<(const worker & kk)
{
return this->age < kk.getAge();
}
2.在调用L1.merge(L2)的前面添加以下两行。

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

这样程序就可以正常运行,并输出正确答案了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
新能源汽车通许旗舰店这个地址在什么地方,我
在学校申请助学金需要哪些东西?没有通知书里
晚会用英语怎么说
谁的华为荣耀畅玩4用过三键强刷?
天可补,海可填,南山可移.日月既往,不可复追是
太阳光沿什么方向旋转
康乐宠物地址在哪,我要去那里办事
霪羊霍 胡芦巴草金樱子 熟地黄 补骨脂 蛇床子
北京哪有卖钱包的
昨晚梦见自己过河突然涨洪水来了,我带着儿子
我家电脑网速4兆为什么下载虐杀原型2很慢呢?
比较南北方的差异耕地类型成熟制度主要农作物
四海数控科技公司这个地址在什么地方,我要处
牛仔裤上弄上棕色鞋油怎么洗才能洗干净
使命召唤11的生存模式有多少张地图
推荐资讯
实行依法治国这一基本方略的重要前提是AA. 建
衣服买的有点大,我想改小一点,想问下有没有
黄平县重兴派出所怎么去啊,有知道地址的么
老厨味道在什么地方啊,我要过去处理事情
皮带打孔冲子怎么用
豆角和茄子怎么炒好吃
马路边的电线杆歇后语
EA211发动机带进排气门可变正时技术么
如果我不主动联系男友,他可以一整天不理我,那
佛教选择题,谁能搞定?
南三角游园这个地址在什么地方,我要处理点事
儿童服用脊髓灰质炎疫苗后,会产生相应的抗体
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?