fork download
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. class Kamus
  9. {
  10. private:
  11. map<string, vector<string>> kamus;
  12.  
  13. void addUnique(vector<string>& kamus, string val)
  14. {
  15. if (find (kamus.begin(), kamus.end(), val) == kamus.end())
  16. {
  17. kamus.push_back(val);
  18. }
  19. }
  20.  
  21.  
  22. public:
  23. void tambah(string kata, vector<string> sinonim)
  24. {
  25. if (kamus.find(kata) == kamus.end())
  26. {
  27. kamus[kata] = vector<string>(); // Add new kamus if there's no existing main key
  28. }
  29.  
  30. for (string s: sinonim)
  31. {
  32. // Add the synonym to the main word map
  33. addUnique(kamus[kata], s);
  34.  
  35. // Add bidirectional links
  36. addUnique(kamus[s], kata);
  37. }
  38. }
  39.  
  40. vector<string>* ambilSinonim(string kata)
  41. {
  42. auto it = kamus.find(kata);
  43. if (it == kamus.end())
  44. {
  45. return nullptr;
  46. }
  47. return &(it->second);
  48. }
  49. };
  50.  
  51.  
  52. string printVec(vector<string>* strings)
  53. {
  54. if (strings == nullptr)
  55. {
  56. return "nullptr";
  57. }
  58.  
  59. string out {"["};
  60. for (int i = 0; i < strings->size(); i++)
  61. {
  62. out.append((*strings)[i]);
  63. if (i < strings->size() - 1)
  64. {
  65. out.append(1, ',').append(1, ' ');
  66. }
  67. }
  68. out.append(1, ']');
  69.  
  70. return out;
  71. }
  72.  
  73. int main() {
  74. Kamus kamus;
  75. kamus.tambah("big", {"large", "great"});
  76. kamus.tambah("big", {"huge", "fat"});
  77. kamus.tambah("huge", {"enormous", "gigantic"});
  78.  
  79. cout << "Sinonim \"big\": " << printVec(kamus.ambilSinonim("big")) << endl;
  80.  
  81. cout << "Sinonim \"huge\": " << printVec(kamus.ambilSinonim("huge")) << endl;
  82.  
  83. cout << "Sinonim \"gigantic\": " << printVec(kamus.ambilSinonim("gigantic")) << endl;
  84.  
  85. cout << "Sinonim \"colossal\": " << printVec(kamus.ambilSinonim("colossal")) << endl;
  86.  
  87. return 0;
  88. }
  89.  
Success #stdin #stdout 0s 5312KB
stdin
Standard input is empty
stdout
Sinonim "big": [large, great, huge, fat]
Sinonim "huge": [big, enormous, gigantic]
Sinonim "gigantic": [huge]
Sinonim "colossal": nullptr