template<typename _Scalar, int _Options, typename _StorageIndex>
 class Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >
 A versatible sparse matrix representation. 
 This class implements a more versatile variants of the common compressed row/column storage format. Each colmun's (resp. row) non zeros are stored as a pair of value with associated row (resp. colmiun) index. All the non zeros are stored in a single large buffer. Unlike the compressed format, there might be extra space in between the nonzeros of two successive colmuns (resp. rows) such that insertion of new non-zero can be done with limited memory reallocation and copies.
 A call to the function makeCompressed() turns the matrix into the standard compressed format compatible with many library.
 More details on this storage sceheme are given in the manual pages.
 
- Template Parameters
-   
| _Scalar | the scalar type, i.e. the type of the coefficients |  
| _Options | Union of bit flags controlling the storage scheme. Currently the only possibility is ColMajor or RowMajor. The default is 0 which means column-major. |  
| _StorageIndex | the type of the indices. It has to be a signed type (e.g., short, int, std::ptrdiff_t). Default is int. |  
 
- Warning
- In Eigen 3.2, the undocumented type SparseMatrix::Indexwas improperly defined as the storage index type (e.g., int), whereas it is now (starting from Eigen 3.3) deprecated and always defined as Eigen::Index. Codes making use ofSparseMatrix::Index, might thus likely have to be changed to useSparseMatrix::StorageIndexinstead.
This class can be extended with the help of the plugin mechanism described on the page Extending MatrixBase (and other classes) by defining the preprocessor symbol EIGEN_SPARSEMATRIX_PLUGIN. 
    |  | 
 
| Scalar | coeff (Index row, Index col) const | 
 |  | 
 
| Scalar & | coeffRef (Index row, Index col) | 
 |  | 
 
| Index | cols () const | 
 |  | 
 
| void | conservativeResize (Index rows, Index cols) | 
 |  | 
 
| DiagonalReturnType | diagonal () | 
 |  | 
 
| const ConstDiagonalReturnType | diagonal () const | 
 |  | 
 
| StorageIndex * | innerIndexPtr () | 
 |  | 
 
| const StorageIndex * | innerIndexPtr () const | 
 |  | 
 
| StorageIndex * | innerNonZeroPtr () | 
 |  | 
 
| const StorageIndex * | innerNonZeroPtr () const | 
 |  | 
 
| Index | innerSize () const | 
 |  | 
 
| Scalar & | insert (Index row, Index col) | 
 |  | 
 
| bool | isCompressed () const | 
 |  | 
 
| void | makeCompressed () | 
 |  | 
 
| Index | nonZeros () const | 
 |  | 
 
| StorageIndex * | outerIndexPtr () | 
 |  | 
 
| const StorageIndex * | outerIndexPtr () const | 
 |  | 
 
| Index | outerSize () const | 
 |  | 
 | template<typename KeepFunc > | 
 
| void | prune (const KeepFunc &keep=KeepFunc()) | 
 |  | 
 
| void | prune (const Scalar &reference, const RealScalar &epsilon=NumTraits< RealScalar >::dummy_precision()) | 
 |  | 
 | template<class SizesType > | 
 
| void | reserve (const SizesType &reserveSizes) | 
 |  | 
 
| void | reserve (Index reserveSize) | 
 |  | 
 
| void | resize (Index rows, Index cols) | 
 |  | 
 
| Index | rows () const | 
 |  | 
 | template<typename InputIterators > | 
 
| void | setFromTriplets (const InputIterators &begin, const InputIterators &end) | 
 |  | 
 | template<typename InputIterators , typename DupFunctor > | 
 
| void | setFromTriplets (const InputIterators &begin, const InputIterators &end, DupFunctor dup_func) | 
 |  | 
 
| void | setIdentity () | 
 |  | 
 
| void | setZero () | 
 |  | 
 
|  | SparseMatrix () | 
 |  | 
 | template<typename OtherDerived > | 
 
|  | SparseMatrix (const DiagonalBase< OtherDerived > &other) | 
 
|  | Copy constructor with in-place evaluation. 
 | 
 |  | 
 | template<typename OtherDerived > | 
 
|  | SparseMatrix (const ReturnByValue< OtherDerived > &other) | 
 
|  | Copy constructor with in-place evaluation. 
 | 
 |  | 
 
|  | SparseMatrix (const SparseMatrix &other) | 
 |  | 
 | template<typename OtherDerived > | 
 
|  | SparseMatrix (const SparseMatrixBase< OtherDerived > &other) | 
 |  | 
 | template<typename OtherDerived , unsigned int UpLo> | 
 
|  | SparseMatrix (const SparseSelfAdjointView< OtherDerived, UpLo > &other) | 
 |  | 
 
|  | SparseMatrix (Index rows, Index cols) | 
 |  | 
 
| Scalar | sum () const | 
 |  | 
 
| void | swap (SparseMatrix &other) | 
 |  | 
 
| void | uncompress () | 
 |  | 
 
| Scalar * | valuePtr () | 
 |  | 
 
| const Scalar * | valuePtr () const | 
 |  | 
 
|  | ~SparseMatrix () | 
 |  | 
 |  Public Member Functions inherited from Eigen::SparseCompressedBase< SparseMatrix< _Scalar, _Options, _StorageIndex > > | 
 
| Map< Array< Scalar, Dynamic, 1 > > | coeffs () | 
 |  | 
 
| const Map< const Array< Scalar, Dynamic, 1 > > | coeffs () const | 
 |  | 
 
| StorageIndex * | innerIndexPtr () | 
 |  | 
 
| const StorageIndex * | innerIndexPtr () const | 
 |  | 
 
| StorageIndex * | innerNonZeroPtr () | 
 |  | 
 
| const StorageIndex * | innerNonZeroPtr () const | 
 |  | 
 
| bool | isCompressed () const | 
 |  | 
 
| Index | nonZeros () const | 
 |  | 
 
| StorageIndex * | outerIndexPtr () | 
 |  | 
 
| const StorageIndex * | outerIndexPtr () const | 
 |  | 
 
| Scalar * | valuePtr () | 
 |  | 
 
| const Scalar * | valuePtr () const | 
 |  | 
 |  Public Member Functions inherited from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _StorageIndex > > | 
 
| Index | cols () const | 
 |  | 
 
| const internal::eval< SparseMatrix< _Scalar, _Options, _StorageIndex > >::type | eval () const | 
 |  | 
 
| Index | innerSize () const | 
 |  | 
 
| bool | isVector () const | 
 |  | 
 
| const Product< SparseMatrix< _Scalar, _Options, _StorageIndex >, OtherDerived, AliasFreeProduct > | operator* (const SparseMatrixBase< OtherDerived > &other) const | 
 |  | 
 
| Index | outerSize () const | 
 |  | 
 
| const SparseView< SparseMatrix< _Scalar, _Options, _StorageIndex > > | pruned (const Scalar &reference=Scalar(0), const RealScalar &epsilon=NumTraits< Scalar >::dummy_precision()) const | 
 |  | 
 
| Index | rows () const | 
 |  | 
 
| Index | size () const | 
 |  | 
 
| SparseSymmetricPermutationProduct< SparseMatrix< _Scalar, _Options, _StorageIndex >, Upper|Lower > | twistedBy (const PermutationMatrix< Dynamic, Dynamic, StorageIndex > &perm) const | 
 |  | 
 |  Public Member Functions inherited from Eigen::EigenBase< SparseMatrix< _Scalar, _Options, _StorageIndex > > | 
 
| EIGEN_CONSTEXPR Index | cols () const EIGEN_NOEXCEPT | 
 |  | 
 
| SparseMatrix< _Scalar, _Options, _StorageIndex > & | derived () | 
 |  | 
 
| const SparseMatrix< _Scalar, _Options, _StorageIndex > & | derived () const | 
 |  | 
 
| EIGEN_CONSTEXPR Index | rows () const EIGEN_NOEXCEPT | 
 |  | 
 
| EIGEN_CONSTEXPR Index | size () const EIGEN_NOEXCEPT | 
 |  | 
 
   template<typename _Scalar , int _Options, typename _StorageIndex > 
   
 
- Returns
- a non-const reference to the value of the matrix at position i, j 
If the element does not exist then it is inserted via the insert(Index,Index) function which itself turns the matrix into a non compressed form if that was not the case.
 This is a O(log(nnz_j)) operation (binary search) plus the cost of insert(Index,Index) function if the element does not already exist. 
        template<typename _Scalar , int _Options, typename _StorageIndex > 
   
 
- Returns
- a reference to a novel non zero coefficient with coordinates row x col. The non zero coefficient must not already exist.
If the matrix *this is in compressed mode, then *this is turned into uncompressed mode while reserving room for 2 x this->innerSize() non zeros if reserve(Index) has not been called earlier. In this case, the insertion procedure is optimized for a sequential insertion mode where elements are assumed to be inserted by increasing outer-indices.
 If that's not the case, then it is strongly recommended to either use a triplet-list to assemble the matrix, or to first call reserve(const SizesType &) to reserve the appropriate number of non-zero elements per inner vector.
 Assuming memory has been appropriately reserved, this function performs a sorted insertion in O(1) if the elements of each inner vector are inserted in increasing inner index order, and in O(nnz_j) for a random insertion. 
        template<typename _Scalar , int _Options, typename _StorageIndex > 
  template<typename KeepFunc > 
   |   | void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::prune | ( | const KeepFunc & | keep = KeepFunc() | ) |  |  | inline | 
 
  
 Turns the matrix into compressed format, and suppresses all nonzeros which do not satisfy the predicate keep. The functor type KeepFunc must implement the following function: 
bool operator() (const Index& row, const Index& col, const Scalar& value) const;
 
- See also
- prune(Scalar,RealScalar) 
       template<typename _Scalar , int _Options, typename _StorageIndex > 
  template<class SizesType > 
   |   | void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::reserve | ( | const SizesType & | reserveSizes | ) |  |  | inline | 
 
  
 Preallocates reserveSize[j] non zeros for each column (resp. row) j.
 This function turns the matrix in non-compressed mode.
 The type SizesType must expose the following interface: 
typedef value_type;
const value_type& operator[](i) const;
 for i in the [0,this->outerSize()[ range. Typical choices include std::vector<int>, Eigen::VectorXi, Eigen::VectorXi::Constant, etc. 
        template<typename Scalar , int _Options, typename _StorageIndex > 
  template<typename InputIterators > 
   | void Eigen::SparseMatrix< Scalar, _Options, _StorageIndex >::setFromTriplets | ( | const InputIterators & | begin, | 
  |  |  | const InputIterators & | end | 
  |  | ) |  |  | 
 
  
 Fill the matrix *this with the list of triplets defined by the iterator range begin - end.
 A triplet is a tuple (i,j,value) defining a non-zero element. The input list of triplets does not have to be sorted, and can contains duplicated elements. In any case, the result is a sorted and compressed sparse matrix where the duplicates have been summed up. This is a O(n) operation, with n the number of triplet elements. The initial contents of *this is destroyed. The matrix *this must be properly resized beforehand using the SparseMatrix(Index,Index) constructor, or the resize(Index,Index) method. The sizes are not extracted from the triplet list.
 The InputIterators value_type must provide the following interface: 
Scalar value() const; // the value
Scalar row() const;   // the row index i
Scalar col() const;   // the column index j
 See for instance the Eigen::Triplet template class.
 Here is a typical usage example: 
typedef Triplet<double> T;
std::vector<T> tripletList;
tripletList.reserve(estimation_of_entries);
for(...)
{
  // ...
  tripletList.push_back(T(i,j,v_ij));
}
SparseMatrixType m(rows,cols);
m.setFromTriplets(tripletList.begin(), tripletList.end());
// m is ready to go!
- Warning
- The list of triplets is read multiple times (at least twice). Therefore, it is not recommended to define an abstract iterator over a complex data-structure that would be expensive to evaluate. The triplets should rather be explicitly stored into a std::vector for instance. 
       template<typename Scalar , int _Options, typename _StorageIndex > 
  template<typename InputIterators , typename DupFunctor > 
   | void Eigen::SparseMatrix< Scalar, _Options, _StorageIndex >::setFromTriplets | ( | const InputIterators & | begin, | 
  |  |  | const InputIterators & | end, | 
  |  |  | DupFunctor | dup_func | 
  |  | ) |  |  | 
 
  
 The same as setFromTriplets but when duplicates are met the functor dup_func is applied: 
value = dup_func(OldValue, NewValue)
 Here is a C++11 example keeping the latest entry only: 
mat.setFromTriplets(triplets.begin(), triplets.end(), [] (const Scalar&,const Scalar &b) { return b; });