2 回答
TA贡献1876条经验 获得超7个赞
STL中容器list的成员函数merge()
合并两个有序的list,
你调用前没有sort()
先排序。
你应该调用list的splice()函数
// list::merge
#include <iostream>
#include <list>
// compare only integral part:
bool mycomparison (double first, double second)
{ return ( int(first)<int(second) ); }
int main ()
{
std::list<double> first, second;
first.push_back (3.1);
first.push_back (2.2);
first.push_back (2.9);
second.push_back (3.7);
second.push_back (7.1);
second.push_back (1.4);
first.sort();
second.sort();
first.merge(second);
// (second is now empty)
second.push_back (2.1);
first.merge(second,mycomparison);
std::cout << "first contains:";
for (std::list<double>::iterator it=first.begin(); it!=first.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
Output:
first contains: 1.4 2.2 2.9 2.1 3.1 3.7 7.1
TA贡献1827条经验 获得超9个赞
merge有两个重载方式,只有一个形参的merge需要list的元素自定义了“小于”方法。两个形参的merge还需要一个额外的可以进行“小于”比较的函数指针。
可以在Worker类加一个<符重载:
bool operator<(Worker &w)
{
if (age < w.age)
return true;
return false;
}
另外,你这个类设计得不太好,要尽量少地使用指针和数组。你可以用string类型代替char[]或者char *
- 2 回答
- 0 关注
- 121 浏览
添加回答
举报