#include <iostream>
#include <iomanip>
#include <locale>
using namespace std;

class BRL : public numpunct<char>
{
    protected:

    //separador de milhar
    virtual char do_thousands_sep() const
    {
        return ',';
    }

    //padrão de agrupamento dos milhares, de 3 em 3
    virtual std::string do_grouping() const
    {
        return "\03";
    }
};

int main(int argc, char* argv[]){
    float _valor = 1022.33;

    //instanciando um locale que utilizará a especialização de numpunct
    locale br(locale(), new BRL());

    //configurar no cout o locale que será utilizado nas formatações
    cout.imbue(br);

    //setprecistion() é necessário para configurar precisão de apenas duas casas decimais
    //fixed é necessário para que o valor não seja impresso como notação científica.
    cout << "R$ " << setprecision(2) << fixed <<  _valor;

    return 0;
}