Я бы предложил следующую реализацию, используя std :: set , которая сохраняет каждое значение один раз:
#include <set>
#include <vector>
#include <iostream>
using namespace std;
int count_object(vector<vector<int>> &matrix)
{
std::set<int> s;
for(auto &v : matrix)
s.insert(v.begin(), v.end());
s.erase(0);
return s.size();
}
int main()
{
vector<vector<int>> v = { { 1, 2, 3 }, { 3, 2, 1 }, { 0, 4, 1 } };
std::cout << "Unique numbers: " << count_object(v);
}