Se você usar o padrão C ++ 17 no MS Visual Studio 2017 - tenha cuidado: a versão atual contém um erro crítico na implementação de std :: map :: merge e std :: set :: merge. Detalhes - sob o corte.
Como um bug se manifesta?
- A complexidade de std :: map :: merge e std :: set :: merge em vez do log N * padrão (tamanho () + N)), onde N é o tamanho da peça adicionada, resulta em N ao quadrado.
- Se um contêiner com um número suficientemente grande de elementos foi adicionado com a ajuda da mesclagem, após a destruição do contêiner resultante, obtemos um estouro de pilha.
- O contêiner fica em um estado incorreto após a mesclagem ser executada, portanto, outras manifestações são possíveis.
O que a Microsoft diz?
O relatório de erros foi enviado por mim à Microsoft há quase 2 meses.
No Visual Studio 2019, a Atualização 2 da Visualização 2 deveria ter sido corrigida.
Mas na versão atual do Visual Studio 2017 15.9.12 não foi corrigida até agora e, a julgar pelos relatórios mais recentes, aguarde muito tempo ...
O bug é a marcação de cor incorreta dos nós adicionados na implementação do ébano vermelho.
Como se reproduzir?
Variando o valor de mainSize, você pode obter resultados diferentes - apenas execução lenta ou travamento.
O que fazer
Revise seu código e substitua as chamadas de mesclagem pela inserção manual. Ou atualize para o VS 2019.
E se o código compilado já foi para o cliente ... Ohhh ...