C++ 对文档内容进行整体排序

C++初学者。

目前需要建立一张排行榜,每次游戏结束需要用户输入用户名,和分数一起写入到一个文件里。

想知道如何通过对分数大小的排序对 用户名和分数组成的整体进行排序?

首先定义一个键值对map容器存储分数和用户名,这里使用用户名作为键,分数作为值吧,因为分数可能会存在重复值。

然后就可以通过值进行对比比较,找出最大值的数,将键和值一起写入文件中,然后容器map删除该记录;再次进行寻找最大值,

然后插入文件中,直到map中没有数据位置。

#include <iostream>
#include <map>
#include <string>
#include <fstream>

using namespace std;

int main(void) {
	fstream file;
	file.open("text.txt", ios::out | ios::trunc);
	if (!file.is_open()) {
		cout << "文件打开失败!" << endl;
		return -1;
	}

	file << "Name" << "\t" << "Score" << endl;

	
	map<string, int> m_map;

	// 插入数据
	m_map.insert(pair<string, int>("张三", 100));
	m_map.insert(pair<string, int>("李四", 90));
	m_map.insert(pair<string, int>("王五", 110));
	m_map.insert(pair<string, int>("赵六", 95));

	while (m_map.size() != 0) {

		// 迭代器方式找出最大值
		map<string, int>::iterator it = m_map.begin();
		int max = (*it).second;
		for (; it != m_map.end(); it++) {
			if (max < (*it).second) {
				max = (*it).second;    // 找到最大值
			}
		}
		cout << max << endl;


		// 插入文件并删除对应值
		it = m_map.begin();
		for (; it != m_map.end(); it++) {
			if (max == (*it).second) {    // 找到最大值
				file << (*it).first << "\t" << (*it).second << endl;    // 写入文件
				m_map.erase(it);    // 移除容器中的数据
				break;
			}
		}

	}

	file.close();

	return 0;
}

 

或者通过将用户名和分数分别存入下标相同的数组进行排序。。

大一学生真的什么都不会了。。。

 

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632