如果网站上已经存在类似的问题,我很抱歉,但我目前无法理解算法的某些部分。
我有一个Struct,其中包含有关我游戏的用户帐户信息的信息:
struct Account
{
int Position;
string Name;
int Score;
string Date;
int Level;
bool operator < (User SOMETHING, User SOMETHING)
{
return (SOMETHING < SOMETHING);
}
};
vector<Account> User;
User.push_back(Account());
User.push_back(Account());
User.push_back(Account());
User[0].Position=1;
User[1].Position=2;
User[2].Position=3;
sort(User.begin(), User.end(), Account);
我需要对我的矢量的每个结构进行组织,例如,按照每个包含的“位置”值的降序/升序排列。
我只需要帮助(1)bool运算符函数(例如参数和返回值),以及(2)我如何拥有它以便我可以通过多个变量对其进行排序,如位置,分数和数据。水平。 (我需要有3个bool运算符函数吗?)
答案 0 :(得分:4)
使用documentation,如下所示:
struct Account
{
int Position;
string Name;
int Score;
string Date;
int Level;
};
bool operator < (const Account& lhs, const Account& rhs)
{
return std::tie(lhs.Name,lhs.Score,lhs.Date) < std::tie(rhs.Name,rhs.Score,rhs.Date);
}
将根据Name
进行排序,如果Name
相等,那么根据Score
,当Name
和Score
相等时,则根据Date
进行排序{1}}。
排序只需通过以下方式完成:
std::sort(User.begin(), User.end());
默认情况下,对operator<
类型的所有对象使用Account
。
更新:我误解了你的问题。在您的情况下,您需要分开的比较器,例如
struct by_name_ascending
{
bool operator()(const Account& lhs, const Account& rhs) const
{
return lhs.Name < rhs.Name;
}
};
struct by_score_descending
{
bool operator()(const Account& lhs, const Account& rhs) const
{
return lhs.Score > rhs.Score;
}
};
并使用
对矢量进行排序std::sort(User.begin(), User.end(), by_name_ascending());
使用lambdas,您也可以使用
std::sort(User.begin(), User.end(),
[](const Account& lhs, const Account& rhs){
return lhs.Name < rhs.Name;
}
);
直接,只需将<
和>
切换为升序/降序。在类/结构本身中不需要其他助手或操作符。