我有一个基于此视频类的数组:
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”进行比较?谢谢!
答案 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);