#include <iostream>
#include <vector>
#include <string>
#include <algorithm> //random_shuffle
#include <ctime> //time
#include <cstdlib> //srand
#include <set> //multiset
struct SinhVien {
typedef bool (*Comparator)(const SinhVien&, const SinhVien&);
std::string ten;
int diem;
SinhVien(const std::string& t="", int d=0) : ten(t), diem(d) {}
static bool cmpByScore(const SinhVien& lhs, const SinhVien& rhs)
{ return lhs.diem < rhs.diem; };
};
int main()
{
srand(time(0));
std::vector<SinhVien> lopHoc;
// nhập sv
std::string ten;
int diem;
while (std::cin >> ten >> diem) lopHoc.emplace_back(ten, diem);
// xáo trộn ngẫu nhiên lopHoc
std::random_shuffle(lopHoc.begin(), lopHoc.end());
// xuất danh sách nhóm, mỗi nhóm tối đa 6 sv
const int MAX_STUD_PER_GROUP = 6;
int groupId = 1, groupCount = 0;
for (const auto& sv : lopHoc)
{
if (!groupCount) std::cout << "\nNhóm " << groupId << ": " << sv.ten;
else std::cout << ", " << sv.ten;
if (++groupCount == MAX_STUD_PER_GROUP) ++groupId, groupCount = 0;
}
std::cout << "\n";
// tạo danh sách sv có điểm tăng dần
std::multiset<SinhVien, SinhVien::Comparator>
dssv(lopHoc.begin(), lopHoc.end(), SinhVien::cmpByScore);
// xuất danh sách điểm từ thấp đến cao
std::cout << "\nDanh sách lớp học (điểm từ thấp đến cao)\n";
for (const auto& sv : dssv)
std::cout << sv.ten << ": " << sv.diem << "\n";
// chèn thêm 1 sv tên Mai có điểm 7
dssv.emplace("Mai", 7); //hoặc dssv.insert(newSv);
// xuất danh sách lớp học sau khi chèn
std::cout << "\nDanh sách lớp học sau khi chèn\n";
for (const auto& sv : dssv)
std::cout << sv.ten << ": " << sv.diem << "\n";
}