WeiHandsome 2023-07-09 20:49 采纳率: 85%
浏览 21
已结题

c++ merge学习问题

请问如何利用运算符重载完成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;


}

  • 写回答

2条回答 默认 最新

  • Huazie 全栈领域优质创作者 2023-07-09 21:24
    关注

    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;
        }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月10日
  • 已采纳回答 7月9日
  • 创建了问题 7月9日

悬赏问题

  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译
  • ¥100 对反编译和ai熟悉的开发者。
  • ¥15 带序列特征的多输出预测模型
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?