按降序排列包含播放器名称和分数的文本文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按降序排列包含播放器名称和分数的文本文件相关的知识,希望对你有一定的参考价值。

我正在尝试打开一个文本文件,然后以降序对其进行重新排列,以显示谁得分最高。在文本文件中,有玩家的名字和分数。

我已经设法在c ++中打印出文本文件,但是由于变量位于文本文件中,所以我无法找到对其进行排序的方法。

#include <string>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <functional>

using namespace std;

struct player 
    string name;
    int score;
    int position;
;

int main()

    string line;
    ifstream inFile;
    inFile.open("C:/Users/kkpet/Desktop/highscore.txt");
    if (inFile.is_open()) 
        while (getline(inFile, line)) 
            player x;
            ifstream inFile;
            inFile.open("C:/Users/kkpet/Desktop/highscore.txt");
            cout << line << '\n';
        
        inFile.close();
    
    else
        cout << "Unable to open text";

答案

假设您的文本文件如下所示:

Name1 1
Name2 1
Name4 5
Name3 6

您可以做这样的事情:

#include <string>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <functional>
#include <vector>


int main()

    std::string line;
    std::ifstream inFile;
    inFile.open("/C:/Users/kkpet/Desktop/highscore.txt");
    if (inFile.is_open()) 
        std::vector<std::pair<int, std::string> > score_vector;
        std::string name;
        int score;
        while (inFile >> name >> score) 
            score_vector.push_back(std::make_pair(score, name));
            std::cout << line << '\n';
        
        inFile.close();
        std::sort(score_vector.begin(), score_vector.end());
        std::reverse(score_vector.begin(), score_vector.end());
        for(auto it = score_vector.begin(); it != score_vector.end(); ++it)
            std::cout << "Name: " << it->second << " Score: " << it->first << std::endl;
        
    
    else
        std::cout << "Unable to open text";

您首先使用inFile << name << score逐行读取文件,直接给您播放器的名称和分数。然后,您可以从它们中首先创建一个分数作为对,这使排序变得更容易,也可以使用自己的比较函数对货币对的第二个元素进行排序,但为简单起见,我将其放在了这样的位置。然后,您可以使用std::sort方法轻松地对向量进行排序。之后,需要将其还原。

具有自定义比较功能的完整代码:

#include <string.h>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <functional>
#include <vector>

bool compareScorePair(std::pair<std::string, int>&a, std::pair<std::string, int>&b)
    if(a.second > b.second)return true;
    if(a.second == b.second)return a.first.compare(b.first) > 0;
    return false;


int main()

    std::ifstream inFile;
    inFile.open("C:/Users/kkpet/Desktop/highscore.txt");
    if (inFile.is_open()) 
        std::vector<std::pair<std::string, int> > score_vector;
        std::string name;
        int score;
        while (inFile >> name >> score) 
            score_vector.push_back(std::make_pair(name, score));
        
        inFile.close();
        std::sort(score_vector.begin(), score_vector.end(), compareScorePair);
        int place = 1;
        for(auto it = score_vector.begin(); it != score_vector.end(); ++it)
            std::cout << "Place: " << place << " Name: " << it->first << " Score: " << it->second << std::endl;
            ++place;
        
    
    else
        std::cout << "Unable to open text";

输出:

Place: 1 Name: Name3 Score: 6
Place: 2 Name: Name4 Score: 5
Place: 3 Name: Name2 Score: 1
Place: 4 Name: Name1 Score: 1

以上是关于按降序排列包含播放器名称和分数的文本文件的主要内容,如果未能解决你的问题,请参考以下文章

推荐表排序数据框结果按降序排列 Pandas

Ruby - 按值按降序排序哈希值

mysql高阶语句

按降序排列的可枚举范围

2个类,按降序排列到ArrayList中

Vertica - 按降序排列的投影