首页 > 解决方案 > 类中的排序功能

问题描述

我有一个班级客户:

#include <stdio.h>
#include <iostream>
class Client
{
    private:
    vector<Liked*>like;
    public:
    Client();
    ~Client();
    sort_id();
};

其中 like 是类 Client 和 Liked 之间的向量连接。我创建了添加功能:

void Client::addLiked(int id, string title)
{
            Liked* newLiked= new Liked(id, title, year, minute, genre);
            like.push_back(newLiked);
            return ;
}

它负责将电影添加到列表中。我想要排序功能,它会在打印整个列表时按升序对 id 进行排序:

void Client::print_Liked()
{
    int n = like.size();
    if(n == 0)
    {
        cout<<"Is empty"<<endl;
    }
    for(int i=0;i<n;i++)
    {
        sort_id();
        like[i]->print_Liked();
    }
}

我尝试过冒泡排序,但出现错误:

void Client::sort_id()
{
    int n = like.size();
    bool swapped = true;
    int j = 0;
    int temp;
    while (swapped) {
        swapped = false;
        j++;
        for(int i = 0;i < n - j;++i)
        {
            if(like[i]->getID() > like[i+1]->getID())
            {
                temp = like[i]->getID();
                like[i]->getID() = like[i+1]->getID();
                array[i+1]->getID() = temp;
                swapped = true;
            }
        }
    }
}

标签: c++sortingvector

解决方案


对向量进行排序的最简单方法是使用标准std::sort函数和合适的lambda 函数进行比较。

像这样的东西:

void Client::sort_id()
{
    std::sort(begin(like), end(like), [](Liked const* a, Liked const* b)
    {
        return a->getID() > b->getID();
    });
}

推荐阅读