А на что не хватает памяти? На хранение матриц?
Возможно, если матрицы разрежённые (т.е. в основном заполнены нулями), проще будет хранить только ненулевые значения в хэш-таблице (да в той же std::map).
В качестве ключа можно использовать пару индексов (i,j).
Если с таким ключом значения в хэш-таблице нет, считаем, что там лежит ноль.
Если матрица - 1024 х 1024, и в ней всего пара ненулевых значений - экономия памяти будет огромной.
Главное не забывать в результирующей матрице тоже хранить только _ненулевые_ значения.