0

我有一个包含一些对象的矢量容器。对象具有各种属性,主要是整数和字符串。我想要一个 STL 算法,用于按容器的不同属性对容器进行排序。例如,如果棒球卡集合的球员姓名是字符串,球员开始打棒球的年份是整数,我如何按年份编号对向量容器进行排序,然后按球员姓名的字母顺序对其进行排序? 我从来没有真正学过 STL,因为我的教授过去禁止使用它,所以我现在正在努力学习它,以便我可以更快地编程。

4

2 回答 2

2

std::sort()函数使用二进制谓词作为第三个参数,可用于自定义排序顺序。您可以只使用两个不同的谓词:

 std::sort(v.begin() v.end(),
    [](card const& c0, card const& c1){
        return c0.name() < c1.name();
    });

...对于其他属性也是如此。

于 2013-09-01T16:34:04.163 回答
1

你需要做的就是

#include <algorithm>

bool operator<(const MyObject& x, const MyObject& y)
{
    ...
}

std::sort(vec.begin(), vec.end());

用于operator<定义您想要的顺序,如果x应该y在排序之后返回true,否则返回false。根据您的描述,听起来您想先比较年份,如果它们相等,则比较名称。

为你的教授感到羞耻。

于 2013-09-01T16:28:37.653 回答