Don*_*ald 5 c++ sorting struct vector
如果网站上已经存在类似的问题,我很抱歉,但我目前无法理解算法的某些部分.
我有一个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);
Run Code Online (Sandbox Code Playgroud)
我需要组织我的矢量的每个结构,例如,按照每个包含的"位置"值的降序/升序排列.
我只需要帮助(1)bool操作符函数(例如参数和返回值),以及(2)我如何拥有它以便我可以通过多个变量(如位置,分数和级别)对其进行排序.(我需要有3个bool操作符函数吗?)
使用std::tie,像这样:
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);
}
Run Code Online (Sandbox Code Playgroud)
将首先按照 排序Name,如果Name相等则按照 排序Score,当 和Name都Score相等时则按照 排序Date。
排序简单地通过以下方式完成:
std::sort(User.begin(), User.end());
Run Code Online (Sandbox Code Playgroud)
默认情况下,它使用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;
}
};
Run Code Online (Sandbox Code Playgroud)
并对向量进行排序
std::sort(User.begin(), User.end(), by_name_ascending());
Run Code Online (Sandbox Code Playgroud)
对于 lambda,您还可以使用
std::sort(User.begin(), User.end(),
[](const Account& lhs, const Account& rhs){
return lhs.Name < rhs.Name;
}
);
Run Code Online (Sandbox Code Playgroud)
直接、简单地切换<和>升序/降序。类/结构本身不需要其他帮助器或运算符。
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |