c++ - 使用 csv 文件和 c++ 中的结构按字母顺序显示排行榜
问题描述
我有一个来自排行榜的 CSV 文件,如下所示:
1,coldeggman,34m38s
2,Mp16,34m43s
3,Nick_,36m03s
4,Zoekay,36m17s
5,Jonas,36m47s
6,ambaharmony,37m02s
7,ShamrockPA,37m16s
8,susslord,37m28s
9,Totalled,37m53s
10,Shape,38m32s
我已经编写了这个用于读取文件的结构:
struct Player {
string username;
unsigned paidoff_seconds;
unsigned rank;
};
我有一个名为 display 的函数,它的工作是显示排行榜。这是代码:
void display(const Player arr[], unsigned n) {
cout << setw(15) << "Rank" << setw(15) << "Username" <<
setw(15) << "Time" << endl;
for (int i = 0; i < n; i++) {
cout << setw(15) << arr[i].rank << setw(15) << arr[i].username << setw(15) <<
arr[i].paidoff_seconds << 's' << endl;
}
}
我的问题是如何按字母顺序显示我的排行榜。我认为为了做到这一点,我需要创建另一个函数,该函数对用户名进行排序并使用冒泡排序算法对其进行重新排序。这是我创建的代码:
void sort_username(Player arr[], unsigned n) {
for (int i = 0; n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j].username > arr[j + 1].username) {
string temp = arr[j].username;
arr[j].username = arr[j + 1].username;
arr[j + 1].username = temp;
}
}
}
}
然后我想使用 display 函数来显示新排序的数组,但它不起作用,我认为这是因为除了用户名之外还有其他变量需要考虑,例如 rank 和 payoff_seconds。有什么建议吗?
解决方案
您可以使用 STL 容器std::vector<Player> arr
而不是 C 数组Player arr[]
,并像这样按用户名排序:
std::sort(arr.begin(), arr.end(), [](const Player &p1, const Player &p2){ return p1.username < p2.username; });
推荐阅读
- reactjs - 如何在 React Native 中创建全局布局组件?
- java - CompletableFuture 简化自定义示例
- url - 如何使用完全限定的服务器名称地址访问 Rabbitmq 管理 UI?
- python - Python 日期格式
- quaternions - 妙手镯;如何从四元数到前臂方向单位向量?
- nginx - Unirest 连接超时
- postgresql - 我在批量创建操作期间遇到了以下死锁。调试此问题的可能方法是什么?
- c# - 如何将对象列表转换为一维数组?
- android - 为什么 QBDialog 的收件人 ID 始终为空,但在 Quickblox 中有 2 个不同的对手 ID
- c++ - 使用 SFINAE 的 C++ 构造函数特化