c++ - 类中的排序功能
问题描述
我有一个班级客户:
#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;
}
}
}
}
解决方案
对向量进行排序的最简单方法是使用标准std::sort
函数和合适的lambda 函数进行比较。
像这样的东西:
void Client::sort_id()
{
std::sort(begin(like), end(like), [](Liked const* a, Liked const* b)
{
return a->getID() > b->getID();
});
}
推荐阅读
- react-admin - 在 show/edit-URL 中使用 ID 而不是 IRI
- oracle - ORACLE PL/SQL 更新价格
- python - 有没有一种优雅的方法可以在没有 x 的情况下增加“arr”的索引?
- r - R编程:子集函数列标题以其原始格式不可用
- python - 创建一个新的 Dataframe 列,其中包含来自两个现有列的字典,每个列都包含列表
- linux - 在没有图形界面的Ubuntu下,我应该用什么命令来代替gnome-terminal
- r - 根据 R 中另一列中的唯一值创建升序值列,并批量添加新数据
- loops - Pyspark 嵌套循环在同一个 DataFrame 中。如何迭代?
- javascript - 将值分配给 rowData 但数组给出长度 0 - Ag-grid
- python - 将屏幕截图从 selenium 保存到绝对路径