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