我是Cpp新手,我有一个问题,我找不到答案。因此,我使用课程编写了有关旅游景点的程序。在里面,我有景点的名称,地址和距市中心的距离。我所做的就是输入和输出。现在我不知道如何使用InsertionSort对它们进行排序。我需要另一个阵列吗? 我想按距离对它们进行排序,但不知道如何写。
这就是我拥有的
#include <iostream>
#include <string>
using namespace std;
class Tobekt {
private: string name;
string addres;
int distance;
public:
void input(void);
void output(void);
};
void Tobekt::input(){
cout<<"Landmark name: ";
getline(cin, name);
getline(cin, addres);
cout<<"Addres: ";
getline(cin, addres);
cout<<"Distance from the city center: ";
cin>>distance;
}
void Tobekt::output(){
cout<<endl;
cout<<"Landmark name: "<<name<<endl;
cout<<"Addres: "<<addres<<endl;
cout<<"Distance from the city center: "<<distance<<endl;
}
int main()
{
int n;
cout<<"Tourist landmarks:" ;
cin>>n;
Tobekt *A = new Tobekt[n];
for(int i=0; i<n; i++)
{
A[i].input();
}
for(int i=0; i<n; i++)
{
A[i].output();
}
return 0;
}
答案 0 :(得分:2)
您可以简单地使用标准库中的sort
算法对数组进行排序,并提供自定义的排序条件。例如,在下面,按照距离对景点进行分类。
auto sort_criteria=[](const auto& a, const auto&b){
return a.distance < b.distance;
};
int main()
{
Tobekt *A = new Tobekt[n];
//read input
sort(A, A+n, sort_criteria);
//other stuff
}
答案 1 :(得分:2)
Insertion Sort的算法不需要新的数组即可进行排序。插入排序背后的想法是在数组中循环两次。
您可以访问此link,以更好地了解其工作原理。因此,您可能需要执行比较功能的功能。就像是...
bool SmallerDistance(const Tobekt& lhs, const Tobekt& rhs)
{
return lhs.GetDistance() < rhs.GetDistance();
}
当然,您需要创建getter函数以获取与类的距离。另外,您始终可以创建operator<
成员函数并与两个变量进行比较。
P.S。 new
之后,切记要删除A变量,否则程序会发生内存泄漏。
答案 2 :(得分:0)
您可能会发现R. Lafore "Algorithms & Data Structures in Java"这本书很有用。关于排序算法有两章,包括带有相关代码段的插入排序。 (它说的是Java,但Java的语法接近C ++,并且书中有一节讨论了两种语言之间的差异。)