[ ] и value в QMap и QHash

Как изменить значение QMap или QHash элемента. Оказывается надо работать через ссылку:

class A
{
public:
    A() // default ctor
    {
        ii=0;
        //qDebug("default ctor A() ii=%i",ii);
    }
    A(const A&a) // copy ctor
    {
        ii = a.ii;
        //qDebug("copy ctor A(const A&a) aa.ii=%i",ii);
    }
    A(int ii_) // users ctor
    {
        ii=ii_;
        //qDebug("user ctor A(int %i)",ii);
    }
    ~A()
    {
        //qDebug("dtor A~ ii=%i",ii);
    }

    int ii;
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QHash< int , A > map;

     map[1] = A(111);
     map[4] = A(444);

    A &aa1 =map[1]; 
    aa1.ii = 789; // так сработает

    A aa2 =map[1]; 
    aa2.ii = 456; // так НЕ сработает, так aa2 это будет копия

    qDebug("----- foreach -----");

    foreach(A a, map)
        qDebug("a.ii=%i", a.ii);

вывод:
----- foreach -----
a.ii=456
a.ii=444

Обращения к элементу контейнера по не существующему ключу через квадратные скобки [ ] создает новый элемент со всеми вытекающими последствиями. И [] вызывает конструктор по умолчанию.