Почему вставка делает недействительным обратный итератор std :: set

Насколько я понимаю, итераторы ассоциативных контейнеров не становятся недействительными во время вставки или удаления (если только не удален узел, указанный итератором). Но в приведенной ниже программе вставка, кажется, делает недействительным итератор. Мое понимание неверно?

typedef std::set myset_t;

int main(int argc, char **argv)
{
    myset_t rs;
    myset_t::reverse_iterator rit;
    myset_t::reverse_iterator srit;
    int ii = 500;

    rs.insert(10);
    rs.insert(11);
    rs.insert(12);
    rs.insert(13);
    rs.insert(14);
    rs.insert(100000);
    rs.insert(102000);
    rs.insert(103000);

    rit = rs.rbegin();

    while(rit != rs.rend()) {
        srit = rit;
        if (*rit < 100000) {
            cout < "bailing here " < *rit < endl;
            return 0;
        } 
        rit++;
        cout < "Before erase " < *rit < endl;
        rs.erase(*srit);
        cout < "Before insert " < *rit < endl;
        rs.insert(ii);
        cout < "After insert " < *rit < endl;
        ii++;
    }
    cout < "Out of loop" < endl;
}
===

The output is 
Before erase 102000
Before insert 102000
After insert 14
bailing here 14

=====

Ответы на вопрос(1)

Ваш ответ на вопрос