fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <utility> // Diperlukan untuk std::pair
  5.  
  6. // Struktur data untuk menyimpan informasi satu pendonor
  7. struct Pendonor {
  8. int kode_desa;
  9. int kode_golongan_darah; // Tidak digunakan untuk perhitungan ini
  10. int volume_darah_ml;
  11. };
  12.  
  13. /**
  14.  * Menghitung jumlah total pendonor dan volume darah yang didonasikan
  15.  * untuk setiap kode desa.
  16.  * * @param data_pendonor Vektor berisi data semua pendonor.
  17.  * @return Map: {Kode_Desa: <Jumlah_Pendonor, Total_Volume_ml>}
  18.  */
  19. std::map<int, std::pair<int, int>> hitung_donor_dan_volume(const std::vector<Pendonor>& data_pendonor) {
  20. // Map untuk menyimpan hasil. Key = Kode Desa, Value = Pair <Jumlah, Volume>
  21. std::map<int, std::pair<int, int>> hasil_akumulasi;
  22.  
  23. // Loop melalui setiap data pendonor
  24. for (const auto& donor : data_pendonor) {
  25. int kode_desa = donor.kode_desa;
  26. int volume = donor.volume_darah_ml;
  27.  
  28. // Jika kode_desa belum ada, map akan membuatnya dan menginisialisasi nilainya (0, 0)
  29.  
  30. // Akumulasi Jumlah Pendonor (first element of the pair)
  31. hasil_akumulasi[kode_desa].first += 1;
  32.  
  33. // Akumulasi Total Volume Darah (second element of the pair)
  34. hasil_akumulasi[kode_desa].second += volume;
  35. }
  36.  
  37. return hasil_akumulasi;
  38. }
  39.  
  40. int main() {
  41. // --- DATA MASUKAN UJI COBA (Contoh dari Buku) ---
  42. // Format: {Kode Desa, Kode Golongan Darah, Volume Darah (ml)}
  43. std::vector<Pendonor> data_uji = {
  44. {3, 1, 150},
  45. {1, 2, 250},
  46. {3, 4, 200},
  47. {2, 1, 100},
  48. {1, 3, 250},
  49. {1, 2, 200},
  50. {2, 4, 100},
  51. {3, 1, 150}
  52. };
  53.  
  54. // Eksekusi fungsi perhitungan
  55. std::map<int, std::pair<int, int>> hasil = hitung_donor_dan_volume(data_uji);
  56.  
  57. // --- MENAMPILKAN HASIL ---
  58. std::cout << "--- Laporan Hasil Sub Problem 2 ---" << std::endl;
  59.  
  60. // std::map menjamin iterasi dilakukan berdasarkan urutan kunci (Kode Desa)
  61. for (const auto& pair : hasil) {
  62. int kode_desa = pair.first;
  63. int jumlah_pendonor = pair.second.first;
  64. int total_volume = pair.second.second;
  65.  
  66. std::cout << "Desa " << kode_desa << ": "
  67. << jumlah_pendonor << " Pendonor, "
  68. << total_volume << " ml" << std::endl;
  69. }
  70.  
  71. return 0;
  72. }
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
--- Laporan Hasil Sub Problem 2 ---
Desa 1: 3 Pendonor, 700 ml
Desa 2: 2 Pendonor, 200 ml
Desa 3: 3 Pendonor, 500 ml