首页 > 解决方案 > 使用 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。有什么建议吗?

标签: c++sortingparsingstruct

解决方案


您可以使用 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; });

推荐阅读