#include <vector>
#include <iostream>
#include <functional> // Necessário para usar o std::less

using namespace std;

// Sobrecarrega o operador de menor para a classe `vector`
bool operator<(const vector<int>& a, const vector<int>& b)
{
	vector<int>::const_iterator aIt = a.begin();
	vector<int>::const_iterator bIt = b.begin();
	
	bool ret = true;
	while(aIt != a.end() && bIt != b.end())
	{
		//if(*aIt >= *bIt) // <== Mais simples e mais claro. Portanto, melhor.
		if(!less<int>()(*aIt, *bIt))
		{
			ret = false;
			break;
		}
		
		++aIt;
		++bIt;
	}
	return ret;
}

int main()
{
	vector<int> v1 = {5, 3, 8};
	vector<int> v2 = {4, 1, 6};
	
	// Imprime os vetores para conferência
	cout << "v1: ";
	for (auto i: v1)
  		std::cout << i << ' ';
    cout << endl;
    
	cout << "v2: ";
	for (auto i: v2)
  		std::cout << i << ' ';
    cout << endl;
    	
    // Usa diretamente o operador para verificar se v2 é menor do que v1
	cout << "v2 < v1? " << (v2 < v1 ? "SIM" : "NAO") << endl;
	
	return 0;
}