请问如何利用运算符重载完成merge
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>
#include<ctime>
#include<functional>
class Person
{
public:
Person()
{
}
Person(string name, int age);
~Person();
bool operator<(const Person& p)
{
if (this->m_Age < p.m_Age)
{
return 1;
}
else
return 0;
}
private:
string m_Name;
int m_Age;
friend void test02();
friend class MyPrint;
friend class MyCompareUP;
friend class MyCompareDown;
};
Person::Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
Person::~Person()
{
}
class MyCompareUP
{
public:
bool operator()(const Person& p1, const Person& p2)
{
return p1.m_Age < p2.m_Age;
}
};
class MyCompareDown
{
public:
bool operator()(const Person& p1, const Person& p2)
{
return p1.m_Age > p2.m_Age;
}
};
class MyPrint
{
public:
void operator()(const Person& p)
{
cout << "姓名" << p.m_Name << "年龄" << p.m_Age << endl;
}
};
void myPrint(int c)
{
cout << c << " ";
}
void test01()
{
vector<int>v,v2,v3;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
v2.push_back(i+1);
}
cout << "升序合并" << endl;
// sort(v.begin(), v.end());
// sort(v2.begin(), v2.end());
v3.resize(v.size() + v2.size());
merge(v.begin(), v.end(), v2.begin(), v2.end(), v3.begin());
for_each(v3.begin(), v3.end(), myPrint); cout << endl;
v3.clear();
cout << "降序合并" << endl;
sort(v.begin(), v.end(),greater<int>());
sort(v2.begin(), v2.end(),greater<int>());
v3.resize(v.size() + v2.size());
merge(v.begin(), v.end(), v2.begin(), v2.end(), v3.begin(),greater<int>());
for_each(v3.begin(), v3.end(), myPrint); cout << endl;
v3.clear();
}
void test02()
{
vector<Person>v,v2,v3;
char nameSeed[3][2] = { "A","B","C" };
srand((unsigned int)time(NULL));
for (int i = 0; i < 3; i++)
{
int age = rand() % 100 + 1;
v.push_back(Person((const char*)nameSeed[i], age));
}
Person pp("C", 0);
v2.push_back(pp);
cout << "升序合并" << endl;
sort(v.begin(), v.end(),MyCompareUP());
sort(v2.begin(), v2.end(),MyCompareUP());
v3.resize(v.size() + v2.size());
merge(v.begin(), v.end(), v2.begin(), v2.end(), v3.begin(),[](const Person& p1,const Person& p2){return p1<p2;});
for_each(v3.begin(), v3.end(), MyPrint()); cout << endl;
v3.clear();
cout << "降序合并" << endl;
sort(v.begin(), v.end(),MyCompareDown());
sort(v2.begin(), v2.end(),MyCompareDown());
v3.resize(v.size() + v2.size());
merge(v.begin(), v.end(), v2.begin(), v2.end(), v3.begin(), [](const Person& p1,const Person& p2){return p1>p2;});
for_each(v3.begin(), v3.end(), MyPrint()); cout << endl;
v3.clear();
}
int main()
{
test01();cout<<endl<<endl;
test02();cout<<endl<<endl;
}
Person 类 你还少一个 > 的重载,另外 < 的重载也可以简写一下
bool operator<(const Person& p) const
{
return this->m_Age < p.m_Age;
}
bool operator>(const Person& p) const
{
return this->m_Age > p.m_Age;
}
功能描述:
函数原型
merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
注意:
- 两个容器必须是有序的
- 要提前给目标容器分配空间
参数:
- beg1:容器1开始迭代器
- end1:容器1结束迭代器
- beg2:容器2开始迭代器
- end2:容器2结束迭代器
- dest:目标容器开始迭代器
在C++中完成merge操作可以使用运算符重载来实现。以下是一种可能的操作方法:
class MergeData {
public:
int data;
MergeData(int value) : data(value) {}
bool operator<(const MergeData& other) const {
return data < other.data;
}
};
std::vector<MergeData> container1;
std::vector<MergeData> container2;
// 假设这里已经填充了container1和container2
// container1和container2在插入元素时应该保持有序
std::vector<MergeData> result(container1.size() + container2.size());
std::merge(container1.begin(), container1.end(), container2.begin(), container2.end(), result.begin());
完整的代码示例:
#include <iostream>
#include <vector>
#include <algorithm>
class MergeData {
public:
int data;
MergeData(int value) : data(value) {}
bool operator<(const MergeData& other) const {
return data < other.data;
}
};
int main() {
std::vector<MergeData> container1;
std::vector<MergeData> container2;
// 假设这里已经填充了container1和container2
// container1和container2在插入元素时应该保持有序
std::vector<MergeData> result(container1.size() + container2.size());
std::merge(container1.begin(), container1.end(), container2.begin(), container2.end(), result.begin());
// 打印合并后的结果
for (const MergeData& data : result) {
std::cout << data.data << " ";
}
return 0;
}
以上代码使用了类的方法来完成merge操作,通过给类添加运算符重载函数,可以实现类对象之间的比较和排序。根据你的需求,你可以根据具体的情况选择使用自定义的类或结构体来表示要合并的数据,并相应地实现运算符重载函数。