fork download
  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. using Dict = unordered_map<size_t, size_t>;
  7.  
  8. class CoDec
  9. {
  10. Dict dict;
  11. public:
  12. size_t code(const size_t in)
  13. {
  14. //ищем в словаре
  15. const auto pos = dict.find(in);
  16. if(pos==dict.end())
  17. {
  18. //если не нашли, пополняем словарь
  19. //присваиваем новый код, равный прошлой длине словаря;
  20. const size_t cnt=dict.size();
  21. return dict[in] = cnt;
  22. }
  23. return pos->second; //если нашли, просто выдаем словарное значение
  24. }
  25. size_t decode(const size_t in) const
  26. {
  27. //выдаем из словаря нужное значение по коду
  28. return find_if(dict.cbegin(), dict.cend(), [&in](const Dict::value_type& a)
  29. {
  30. return in == a.second;
  31. })->first;
  32. }
  33. };
  34.  
  35. int main()
  36. {
  37. CoDec cdc;
  38. cout << cdc.code(2) <<' '<< cdc.code(5) <<' '<< cdc.code(8) <<' '<< cdc.code(5) << endl ;
  39. cout << cdc.decode(0)<<' '<< cdc.decode(1) <<' '<< cdc.decode(2)<<' '<< cdc.decode(1)<< endl;
  40. return 0;
  41. }
Success #stdin #stdout 0s 4380KB
stdin
Standard input is empty
stdout
0 1 2 1
2 5 8 5