这是我目前所掌握的:
#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <algorithm>
using namespace std;
#include "video.h"
int main()
{
string user, url, comment, title;
int rating;
double length;
int i = 0, last = 0;
Video *videoObj[100];
Video *temp[100];
// specifies how the videos should be sorted
cin >> user;
cin.ignore();
while (getline(cin,title) ) {
getline(cin, url);
getline(cin, comment);
cin >> length;
cin >> rating;
cin.ignore();
videoObj[i] = new Video(title, url, comment, length, rating);
i++;
last++;
}
temp[i] = new Video(title, url, comment, length, rating);
if(user=="rating"){
for(int i = 0; i < last - 1; i++){
for(int j = i+1; j< last; j++){
if(videoObj[i] -> Rating(videoObj[j])) {
temp[i] = videoObj[i];
videoObj[i]= Rating(videoObj[j]);
Rating(videoObj[j]) = temp[i];
}
}
}
}
for(int i= 0; i < last; i++)
{
videoObj[i]->print();
}
//delete[] videoObj;
return 0;
}
video.cpp文件:
#include <iostream>
#include <algorithm>
using namespace std;
#include "video.h"
Video::Video(string video_title, string video_link, string video_comment, double video_length, int video_number)
: title(video_title), link(video_link), comment(video_comment), length(video_length), rating(video_number)
{
}
bool Video::Rating(Video *videoObj) {
if(rating > videoObj-> rating )
{
return true;
}
else
{
return false;
}
}
void Video::print(){
string star;
switch(rating){
case 1:
star = "*";
break;
case 2:
star = "**";
break;
case 3:
star = "***";
break;
case 4:
star = "****";
break;
case 5:
star = "*****";
break;
}
cout << title << ", " << link << ", " << comment << ", " << length << ", " << star << endl;
}
void Video::temp(){
title, link, comment, length, rating;
}
video.h文件:
#ifndef VIDEO_H
#define VIDEO_H
using namespace std;
class Video {
public:
Video(string video_title, string video_link, string video_comment, double video_length, int video_number);
void print();
bool Rating(Video *videoObj);
void temp();
private:
string title;
string link;
string comment;
double length;
int rating;
};
#endif
我真的不知道如何正确实现气泡排序。我在youtube上查阅了多个不同的视频和stackoverflow上的帖子,但我似乎无法弄清楚如何在我的类中对一个特定的参数进行排序。
我的教授给了我们这些关于在我们班内排序的指示:
在对视频进行排序时,您需要能够确定两个视频对象应该如何排序。最简单的方法是编写成员函数来处理类视频中的比较。例如,当按长度对视频进行排序时,可以使用此方法:
// return true if the current video is longer than the given video (other) ,
// otherwise return false
bool Video :: longer(Video *other) {
return (mlength > other -> mlength ;
}
我甚至不确定在video.cpp
文件中是否正确地执行了这部分。关于如何使排序方法正常工作,有什么想法吗?请温柔点,我对编程很陌生。我意识到我的气泡排序也是错误的,我只是不知道从哪里开始修复它...
struct by_title {
bool operator()(Video const &a, Video const &b) {
return a.title < b.title;
}
};
struct by_rating {
bool operator()(Video const &a, Video const &b) {
return a.rating < b.rating;
}
};
// ...
std::sort(videos.begin(), videos.end(), by_rating);
std::sort(videos.begin(), videos.end(), by_title);
// sort by rating
std::sort(videos.begin(), videos.end(), [](auto &a, auto &b) { return a.rating < b.rating; });
// sort by title
std::sort(videos.begin(), videos.end(), [](auto &a, auto &b) { return a.title < b.title; });
下面的代码片段适用于条件1,但不适用于条件2。
本文向大家介绍TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?相关面试题,主要包含被问及TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?时的应答技巧和注意事项,需要的朋友参考一下 考察点:Tree TreeSet要求存放的对象所属的类必须实现Comparable接
我有字符串数组:15MB、12MB、1TB、1GB。我想通过遵循MB小于GB和TB的规则来对它们进行词典比较。所以最后我想得到:12MB,15MB,1GB,1TB。我找到了一个比较字母的方法: 我在考虑用数字和字母拆分字符串,但我如何用字母“MB”对它们进行排序。然后根据他们的数字。我是使用两个比较器还是其他什么?
我想学习java中的比较器,我在网上找到了这个很好的例子,我的问题是如何更改这个代码,使宠物的名字按年龄和降序排列,以便最大的是第一个,最小的是最后一个?
问题内容: 我想为汽车清单开发一个排序演示。我正在使用数据表显示汽车列表。现在实际上我想按汽车颜色对列表进行排序。这里不是按字母顺序排序的。我想使用我的自定义排序顺序,例如先是红色汽车,然后是蓝色,等等。 为此,我尝试使用,但它只允许按字母顺序排序。 因此,任何人都可以指导我实现使用该技术的方法,以便使排序变得更快。 问题答案: 我建议你为汽车颜色创建一个枚举,而不要使用字符串,并且枚举的自然顺序
排序算法有不少,当然,一般的语言中都提供某个排序函数,比如Python中,对list进行排序,可以使用sorted(或者list.sort()),关于这方面的使用,在我的github代码库algorithm中有几个举例,有兴趣的看官可以去那里看看(顺便告知,我在Github中的账号是qiwsir,欢迎follow me)。但是,在某些情况下,语言中提供的排序方法或许不适合,必须选择某种排序算法。