#include <vector>
#include <iostream>
#include <utility>
#include <boost/numeric/ublas/matrix.hpp>
namespace ublas = boost::numeric::ublas;
template <typename T, size_t R, size_t C>
ublas::matrix<T> matrix_from_array(T (&a)[R][C])
{
    ublas::matrix<T> ret(R, C);
    for(size_t r = 0; r<R; ++r)
        for(size_t c = 0; c<C; ++c)
              ret(r,c) = a[r][c];
    return ret;
}
typedef std::vector<std::pair<size_t, size_t> > posvec_t;
template <typename T>
posvec_t find_all(const ublas::matrix<T>& m, T val)
{
    posvec_t ret;
    for(size_t r=0; r<m.size1(); ++r)
       for(size_t c=0; c<m.size2(); ++c)
           if(m(r,c) == val)
               ret.push_back(std::make_pair(r, c));
    return ret;
}
int main ()
{
    int a[4][5] = {{1,2,3,4,5},
                   {2,4,6,8,1},
                   {1,5,4,6,8},
                   {9,4,6,7,0}};
    ublas::matrix<int> m = matrix_from_array(a);
    posvec_t v = find_all(m, 6);
    for(size_t p = 0; p<v.size(); ++p)
        std::cout << "(" << v[p].first << ", " << v[p].second << ")\n";
}
