socialgraph

Map

Sep 17th, 2021 (edited)
150
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <array>
  3. #include <algorithm>
  4.  
  5. const uint8_t MAX_BUFFER_COUNT = 255;
  6. using namespace std;
  7.  
  8.  
  9. template <typename first, typename second>
  10. class Map {
  11. public:
  12.     struct Pair {
  13.         Pair() = default;
  14.  
  15.         Pair(first key_) : key(std::move(key_)) {
  16.         }
  17.  
  18.         first key{};
  19.         second value{};
  20.  
  21.         bool operator<(const Pair& other) const {
  22.             return key < other.key;
  23.         }
  24.     };
  25.  
  26.  
  27. //-------------------- Функция добавления элемента и одновременно сортировки словаря -----------------
  28.     bool setKeyValue(const first key_, const second value_) {
  29.         if (idx <= MAX_BUFFER_COUNT) {
  30.             if (binary_search(map.begin(), map.end(), Pair(key_))) {
  31.                 return false;
  32.             }
  33.             map[idx].key = key_;
  34.             map[idx].value = value_;
  35.             size_t idx_for_swap = idx; // индекс для сохранения неизменности исходного крайнего индекса
  36.             while (idx_for_swap != 0) { // проверка чтобы индекс сравнения не вышел за пределы границы
  37.                 if (map[idx_for_swap].key < map[idx_for_swap - 1].key) {
  38.                     swap(map[idx_for_swap], map[idx_for_swap - 1]);
  39.                 } else {
  40.                     break;
  41.                 }
  42.                 --idx_for_swap;
  43.             }
  44.             ++idx;
  45.             return true;
  46.         }
  47.         return false;
  48.     }
  49.  
  50. //------------------------------ Функция доступа к значению ключа -----------------
  51.     second value(first key_) {
  52.         for (const auto i : map) {
  53.             if (i.key == key_) {
  54.                 return i.value;
  55.             }
  56.         };
  57.     }
  58.  
  59.  
  60. private:
  61.  
  62.     array<Pair, MAX_BUFFER_COUNT> map;
  63.     size_t idx = 0; // Индекс места вставки следующего элемента
  64. };
  65.  
  66. void call() {
  67.     cout << "Beep" << endl;
  68. }
  69.  
  70. int main() {
  71.     Map<int, int> map1;
  72.     cout << map1.setKeyValue(1, 3);
  73.     cout << map1.setKeyValue(4, 121);
  74.     cout << map1.setKeyValue(3, 2);
  75.     cout << map1.setKeyValue(5, 2);
  76.     cout << map1.setKeyValue(4, 2);
  77.     cout << map1.setKeyValue(5, 2);
  78.     cout << map1.setKeyValue(3, 2);
  79.     cout << map1.value(4);
  80. }
  81.  
RAW Paste Data