Если вы не знаете, каким будет ваш шаблон доступа, вы не сможете выбрать оптимальное решение. Кроме того, если у вас нет рабочего решения, вы не можете измерить свою производительность и можете только догадываться, какое решение будет лучшим, и вы, вероятно, догадаетесь неправильно.
Я предлагаю реализовать собственный класс 3D Board с понятным интерфейсом и проверить, достаточно ли ваше тривиальное решение. Если он слишком медленный, вы можете поменять реализацию на более подходящую.
Вот пример того, как вы могли бы реализовать свою плату:
#include <iostream>
#include <unordered_map>
#include <map>
template <class ValueType>
class board_3d {
public:
using key_t = std::tuple<size_t, size_t, size_t>;
using value_t = ValueType;
ValueType& operator[](key_t key) {
return m_data[key];
}
const ValueType& operator[](key_t key) const {
return m_data[key];
}
private:
std::map<key_t, ValueType> m_data;
};
int main()
{
board_3d<int> my_board;
my_board[{0,0,0}] = 5;
return 0;
}
std::map
, вероятно, не то, что Вы хотите в конце. Доступ O (журнал N). Для оптимизации вы можете использовать std::unordered_map
с доступом O (1) или любую реализацию с использованием векторов. Вы также можете добавить функцию изменения размера, которая заботится о копировании данных из старого в новое хранилище.