当前位置: 首页 > 知识库问答 >
问题:

如何比较和排序类中的特定参数?

彭成天
2023-03-14

这是我目前所掌握的:

#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文件中是否正确地执行了这部分。关于如何使排序方法正常工作,有什么想法吗?请温柔点,我对编程很陌生。我意识到我的气泡排序也是错误的,我只是不知道从哪里开始修复它...

共有1个答案

祁星阑
2023-03-14
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)。但是,在某些情况下,语言中提供的排序方法或许不适合,必须选择某种排序算法。