LINUX.ORG.RU

История изменений

Исправление SZT, (текущая версия) :

Нужно по номеру строки получать числа из колонок

Делаешь массив

uint8_t arr[][2] ={{3,2}, {4,3}, {4,2}, {5,3}, {6,3}};
Первая колонка — вообще незачем ее хранить.

наоборот: по заданной паре найти номер строки.

Надо сцепить пары таким образом, чтобы одно целое число было. Например, в случае uint8_t у нас каждое число занимает 1 байт. Пара соотвественно 2 байт. Ну, очевидно

size_t map[] = {
  [(3<<8) | 2] = 0,  [(4<<8) | 3] = 1, 
  [(4<<8) | 2] = 2,  [(5<<8) | 3] = 3,
  [(6<<8) | 3] = 4
}
см. https://gcc.gnu.org/onlinedocs/gcc-6.3.0/gcc/Designated-Inits.html

И таким образом, если сделать обращение к массиву map[(4<<8) | 2] то там будет индекс массива для arr[][2]

Только первая колонка отсуствует, и там вся индексация будет начинаться с 0 а не с 1, но это думаю не особо критично

Исправление SZT, :

Нужно по номеру строки получать числа из колонок

Делаешь массив

uint8_t arr[][2] ={{3,2}, {4,3}, {4,2}, {5,3}, {6,3}};
Первая колонка — вообще незачем ее хранить.

наоборот: по заданной паре найти номер строки.

Надо сцепить пары таким образом, чтобы одно целое число было. Например, в случае uint8_t у нас каждое число занимает 1 байт. Пара соотвественно 2 байт. Ну, очевидно

size_t map[] = {
  [(3<<8) | 2] = 0,  [(4<<8) | 3] = 1, 
  [(4<<8) | 2] = 2,  [(5<<8) | 3] = 3,
  [(6<<8) | 3] = 4
}
см. https://gcc.gnu.org/onlinedocs/gcc-6.3.0/gcc/Designated-Inits.html

И таким образом, если сделать обращение к массиву map[(4<<8) | 2] то там будет индекс массива из arr[][2]

Только первая колонка отсуствует, и там вся индексация будет начинаться с 0 а не с 1, но это думаю не особо критично

Исходная версия SZT, :

Нужно по номеру строки получать числа из колонок

Делаешь массив

uint8_t arr[][2] ={{3,2}, {4,3}, {4,2}, {5,3}, {6,3}};

Первая колонка -- вообще незачем ее хранить.
>наоборот: по заданной паре найти номер строки.
Надо сцепить пары таким образом, чтобы одно целое число было. Например, в случае uint8_t у нас каждое число занимает 1 байт. Пара соотвественно 2 байт. Ну, очевидно
size_t map[] = {
  [(3<<8) | 2] = 0,  [(4<<8) | 3] = 1, 
  [(4<<8) | 2] = 2,  [(5<<8) | 3] = 3,
  [(6<<8) | 3] = 4
}

см. https://gcc.gnu.org/onlinedocs/gcc-6.3.0/gcc/Designated-Inits.html

И таким образом, если сделать обращение к массиву map[(4<<8) | 2] то там будет индекс массива из arr[][2]

Только первая колонка отсуствует, и там вся индексация будет начинаться с 0 а не с 1, но это думаю не особо критично