我有一个容纳一些物体的矢量容器。对象具有各种属性,主要是int和字符串。我想要一个STL算法来按容器的不同属性对其进行排序。 例如,如果棒球卡的集合具有作为字符串的玩家名称,并且玩家开始棒球的一年(这是整数),我如何按年份数对矢量容器进行排序,然后根据玩家名称按字母顺序对其进行排序? 我从来没有真正学过STL,因为我的教授过去禁止使用STL,所以我现在正努力学习它,这样我就能更快地编程。
答案 0 :(得分:2)
std::sort()
函数使用二元谓词作为第三个参数,可用于自定义排序顺序。您可以使用两个不同的谓词:
std::sort(v.begin() v.end(),
[](card const& c0, card const& c1){
return c0.name() < c1.name();
});
......同样适用于其他属性。
答案 1 :(得分:1)
您需要做的就是
#include <algorithm>
bool operator<(const MyObject& x, const MyObject& y)
{
...
}
std::sort(vec.begin(), vec.end());
使用operator<
定义您想要的顺序,如果x
在排序后y
之前,则返回true,否则返回false。从您的描述中听起来就像您想先比较年份,如果它们相等则比较名称。
对你的教授感到羞耻。