我该如何排序这个数组?

时间:2018-02-08 03:59:42

标签: c++ arrays sorting

我有一个基于此视频类的数组:

Video::Video(string i, string j, string k, double l, int m) 
{
    title = i; 
    link = j; 
    comment = k; 
    length = l; 
    rating = m;
}

每个数组元素看起来都像这样:

videolist[i] = new Video(title, link, comment, length, rating);

现在让我们假设用户希望按长度对数组进行排序,最长的视频首先出现。我需要根据最长的视频对数组进行冒泡排序。要做到这一点,我需要做一个功能:

bool Video::longer(Video *other) 
{
    if (/*"other" is greater than the current largest video*/) 
    {
        /*"other" is now the current largest video*/
        return false;
    }
    return true;
}

那么我将如何隔离“其他”视频的长度并将其与当前最长的视频“m_length”进行比较?谢谢!

2 个答案:

答案 0 :(得分:2)

一般来说,我会选择这种方式:

创建Video类的向量。

std::vector< Video > videoArr;

对于排序,您可以使用std::sort中的<algorithm>

您需要做的就是:

#include <vector>
#include <algorithm>

std::vector< Video > videoArr;

std::sort( videoArr.begin(), videoArr.end(), []( const Video& lhs, const Video& rhs )
{
   return lhs.length > rhs.length;
});

OR

// In C++14
#include <vector>
#include <algorithm>

 std::vector< Video > videoArr;

std::sort( videoArr.begin(), videoArr.end(), []( const auto& lhs, const auto& rhs )
{
   return lhs.length > rhs.length;
});

您还可以实施< operator> operator并为您的案例实施小于/大于运算符。

答案 1 :(得分:1)

std::sort与自定义比较器一起使用。

bool cmp(const Video &i, const Video &j)
{
    return i.length > j.length;
}

std::sort(videolist,videolist+number_of_elements,cmp);