не оптимальный, но лаконичный вариант:
Код:

vector<row_type> source;
// заполнить как-то source
...
vector<int> result;
// сливаем всё в один
for(vector<vector<int> >::iterator s1=source.begin(), s2=source.end(); s1!=s2; ++s1)
{
result.insert(result.end(), s1->begin(), s1->end());
}
sort(result.begin(), result.end());
// удаляем дубли
result.erase(unique(result.begin(), result.end()), result.end());
// удаляем *j <= 0
result.erase(result.begin(), upper_bound(result.begin(), result.end(), 0));
// дальше вывод
...