Лучшая комбинация контейнеров для хранения именованного набора координат - PullRequest
2 голосов
/ 17 июня 2020

Мне нужно держать набор до 50 наборов координат (x, y), до 4 в каждом, чтобы он выглядел так:

4: {7, 3}, {5, 3}
27: {1, 1}
44: {9, 9}, {9, 7}, {7, 7} and so on

И x, и y никогда не будет ни выше 9, ни ниже 0. В итоге я получил unordered_map<uint8_t, vector<vector<uint8_t>>>, но почти уверен, что это неэффективно. Кроме того, он будет сгенерирован в течение цикла с набором if и удален после нескольких чтений.

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Если вы знаете о x и y (0 <= x <= 9), вы можете использовать <a href="https://en.cppreference.com/w/cpp/language/bit_field" rel="nofollow noreferrer"> битовое поле .

И я бы сохранил такие данные

struct Pair {
  uint8_t x:4;
  uint8_t y:4;
};

unordered_map<uint8_t, vector<Pair>> container;
1 голос
/ 17 июня 2020

Вы можете просто использовать многомерный вектор как таковой:

vector <pair<int, int>> coordinates[50];

Что делает это объявление, оно объявляет array из 50 vectors, содержащего pairs of integers. В вашем случае пары целых чисел будут представлять координаты x и y.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...