2D массив, некоторые ячейки содержат определенные данные - PullRequest
0 голосов
/ 29 августа 2018

У меня есть массив, скажем (чтобы упростить) x и y позиции. Я хочу хранить конкретные данные только для некоторых ячеек, и это кажется сложным. Я мог бы хранить специфические данные для всех ячеек, но я хочу держать их только для некоторых из них (без потерь памяти, для небольшого массива 3000x3000 имеется 9 000 000 ячеек). Кроме того, это должно быть очень быстро. Я не знаю что делать Алгоритмы хеширования, кажется, для другой проблемы. Я хотел бы получить, например, x = 50 и y = 100 перейдите в контейнер и быстро получите data , но что если x = 100, y = 50 и т. д. Спасибо за помощь.

Ответы [ 4 ]

0 голосов
/ 30 августа 2018

HashMap из HashMaps должен работать почти нормально и будет служить разреженной матрицей для вашего варианта использования. Это реализация на разных языках будет,

  • C ++ 11: unordered_map<int, unordered_map<int, int>> store;
  • Java: HashMap<Integer, HashMap<String, Integer>> store = new HashMap<>();
  • Python: store = defaultdict(dict)
0 голосов
/ 29 августа 2018

Матрица - это двумерный объект, определяемый m строкой и n столбцами, если большая часть элемента в этой Матрице имеет значение 0, называется Разреженная матрица

int sparseMatrix[x][y]

Используется для сокращения времени вычислений путем обхода только ненулевых элементов.

0 голосов
/ 29 августа 2018

Используйте это:

int a[sizex][sizey]; //this creates an array with empty slots
a[x][y]=somenumber; //this changes a value of slot on (x,y) coordinates

sizex: размер x в массиве

sizey: размер y в массиве

Пример:

e = пусто

int a[4][5]; /*creates an array: e, e ,e ,e
                                 e, e ,e ,e
                                 e, e ,e ,e
                                 e, e ,e ,e
                                 e, e ,e ,e*/
a[1][2]=5; /*Now array look like this: e, e ,e ,e
                                       5, e ,e ,e
                                       e, e ,e ,e
                                       e, e ,e ,e
                                       e, e ,e ,e*/
cout<<a[1][2]; //this prints number 5
0 голосов
/ 29 августа 2018

Использовать неупорядоченный набор

key может быть кортежем x, y

Укажите также класс KeyEqual, который заменяет класс по умолчанию вашей пользовательской функцией сравнения.

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