This behavior is undefined and will not work reliably. After adding a line to print the keys and values inside your erasing lambda function, I see:
1=5000
2=1
3=2
4=5000
2=1 // AGAIN!!!
3=2 // AGAIN!!!
5=5000
6=3
map 4 node 2! node 3. (v.second > 1000) - , .
: " , ( node) ?"
, .
node delete , node, , delete, :
" ", , ( ).
, node, , , - .
, erase map, , - , . // , .
, , , , // , , operator++() "" , , , map.
, N3 node 3:
N5
/ \
N3 N7
/ \ /
N1 N4 N6
, , :
, N1; map , , , begin() O (1)
node , {Nfrom = , , nullptr right!= Nfrom break} (, N1- > N3, N4- > N3- > N5, N6- > N7- > N5- > nullptr)
node , (, N3- > N4, N5- > N7- > N6)
, , N4 ( N3->right = nullptr;) , NFrom = N4, N3, N3- > right!= Nfrom, , N3 N5.
, erase, , " ".
, erase - it undefined . , , .