Какова подходящая структура данных для представления разреженного теснора в С++? Первый вариант, который приходит на ум, — это boost::unordered_map
, поскольку он позволяет выполнять такие операции, как быстрая установка и извлечение элемента, как показано ниже:
A(i,j,k,l) = 5
Однако я также хотел бы иметь возможность выполнять сокращения по одному индексу, что включало бы суммирование по одному из индексов.
C(i,j,k,m) = A(i,j,k,l)*B(l,m)
Насколько легко было бы реализовать этот оператор с boost::unordered_map
? Есть ли более подходящая структура данных?