#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";
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPGJvb3N0L251bWVyaWMvdWJsYXMvbWF0cml4LmhwcD4KbmFtZXNwYWNlIHVibGFzID0gYm9vc3Q6Om51bWVyaWM6OnVibGFzOwp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IFIsIHNpemVfdCBDPgp1Ymxhczo6bWF0cml4PFQ+IG1hdHJpeF9mcm9tX2FycmF5KFQgKCZhKVtSXVtDXSkKewogICAgdWJsYXM6Om1hdHJpeDxUPiByZXQoUiwgQyk7CiAgICBmb3Ioc2l6ZV90IHIgPSAwOyByPFI7ICsrcikKICAgICAgICBmb3Ioc2l6ZV90IGMgPSAwOyBjPEM7ICsrYykKICAgICAgICAgICAgICByZXQocixjKSA9IGFbcl1bY107CiAgICByZXR1cm4gcmV0Owp9CnR5cGVkZWYgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPHNpemVfdCwgc2l6ZV90PiA+IHBvc3ZlY190Owp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KcG9zdmVjX3QgZmluZF9hbGwoY29uc3QgdWJsYXM6Om1hdHJpeDxUPiYgbSwgVCB2YWwpCnsKICAgIHBvc3ZlY190IHJldDsKICAgIGZvcihzaXplX3Qgcj0wOyByPG0uc2l6ZTEoKTsgKytyKQogICAgICAgZm9yKHNpemVfdCBjPTA7IGM8bS5zaXplMigpOyArK2MpCiAgICAgICAgICAgaWYobShyLGMpID09IHZhbCkKICAgICAgICAgICAgICAgcmV0LnB1c2hfYmFjayhzdGQ6Om1ha2VfcGFpcihyLCBjKSk7CiAgICByZXR1cm4gcmV0Owp9CmludCBtYWluICgpCnsKICAgIGludCBhWzRdWzVdID0ge3sxLDIsMyw0LDV9LAogICAgICAgICAgICAgICAgICAgezIsNCw2LDgsMX0sCiAgICAgICAgICAgICAgICAgICB7MSw1LDQsNiw4fSwKICAgICAgICAgICAgICAgICAgIHs5LDQsNiw3LDB9fTsKICAgIHVibGFzOjptYXRyaXg8aW50PiBtID0gbWF0cml4X2Zyb21fYXJyYXkoYSk7CiAgICBwb3N2ZWNfdCB2ID0gZmluZF9hbGwobSwgNik7CiAgICBmb3Ioc2l6ZV90IHAgPSAwOyBwPHYuc2l6ZSgpOyArK3ApCiAgICAgICAgc3RkOjpjb3V0IDw8ICIoIiA8PCB2W3BdLmZpcnN0IDw8ICIsICIgPDwgdltwXS5zZWNvbmQgPDwgIilcbiI7Cn0K