#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
class Klasemen {
private:
map<string, int> dataPoin;
public:
// Mencatat hasil pertandingan
void catatPermainan(string klubKandang, string klubTandang, string skor) {
int skorKandang, skorTandang;
// Memisahkan skor menjadi dua bilangan
sscanf(skor.c_str(), "%d:%d", &skorKandang, &skorTandang);
// Jika klub belum ada di map, inisialisasi dengan 0
if (dataPoin.find(klubKandang) == dataPoin.end()) dataPoin[klubKandang] = 0;
if (dataPoin.find(klubTandang) == dataPoin.end()) dataPoin[klubTandang] = 0;
// Menentukan hasil pertandingan
if (skorKandang > skorTandang) {
dataPoin[klubKandang] += 3;
} else if (skorKandang < skorTandang) {
dataPoin[klubTandang] += 3;
} else {
dataPoin[klubKandang] += 1;
dataPoin[klubTandang] += 1;
}
}
// Mengembalikan array klub dalam bentuk vector pasangan (klub, poin) dan diurutkan dari tertinggi
vector<pair<string, int>> cetakKlasemen() {
vector<pair<string, int>> klasemen(dataPoin.begin(), dataPoin.end());
// Urutkan berdasarkan poin (descending), lalu nama klub (ascending)
sort(klasemen.begin(), klasemen.end(), [](auto &a, auto &b) {
if (a.second != b.second)
return a.second > b.second;
return a.first < b.first;
});
return klasemen;
}
// Mengambil nama klub di peringkat tertentu (1 = teratas)
string ambilPeringkat(int nomorPeringkat) {
auto klasemen = cetakKlasemen();
if (nomorPeringkat <= 0 || nomorPeringkat > klasemen.size()) {
return "Peringkat tidak ditemukan.";
}
return klasemen[nomorPeringkat - 1].first;
}
};
// Contoh penggunaan
int main() {
Klasemen klasemen;
// Catat beberapa pertandingan
klasemen.catatPermainan("Persija", "Arema", "2:1");
klasemen.catatPermainan("Persib", "Persija", "1:1");
klasemen.catatPermainan("Arema", "Persib", "0:3");
// Cetak klasemen
vector<pair<string, int>> hasil = klasemen.cetakKlasemen();
cout << "Klasemen Sementara:\n";
for (int i = 0; i < hasil.size(); ++i) {
cout << i + 1 << ". " << hasil[i].first << " - " << hasil[i].second << " poin" << endl;
}
// Ambil peringkat ke-1
cout << "\nPeringkat 1: " << klasemen.ambilPeringkat(1) << endl;
return 0;
}