#include <iostream>
#include <vector>
#include <algorithm>
#include <chrono>

using namespace std;

template <class F>
chrono::milliseconds take_time(F&& f)
{
	auto const begin = chrono::system_clock::now();
	f();
	auto const end = chrono::system_clock::now();
	return chrono::duration_cast<chrono::milliseconds>( end - begin );
}

int main()
{
	vector< vector<int> > arr {
		{1,5,3,4},
		{0,4,1,0},
		{7,2,3,1}
	};
	auto const time = take_time([&] {
		vector<int> tmp;
		
		for (auto& r : arr)
			copy( r.begin(), r.end(), back_inserter( tmp ) );
		
		sort( tmp.begin(), tmp.end() );
		
		for (unsigned r=0; r<arr.size(); ++r) {
			for (unsigned c=0; c<arr[r].size(); ++c) {
				const unsigned i= r * arr[r].size() + c;
				arr[r][c] = tmp[i];
			}
		}
	});
	/* results */
	for (auto& row : arr)
	{
		for (auto& col : row)
			cout << col << ", ";
		cout << '\n';
	}
	cout << time.count() << " ms." << endl;
	
	return 0;
}