Como faço para escrever um loop que itera sobre uma CAtlMap apagar seletivamente elementos como vai?

StackOverflow https://stackoverflow.com/questions/197121

  •  10-07-2019
  •  | 
  •  

Pergunta

Eu estou tentando fazer o seguinte sem código caso muito especial para lidar com cargos invalidados etc:

Qual é a melhor maneira de preencher os espaços em branco?

void DeleteUnreferencedRecords(CAtlMap<Record>& records)
{
   for(____;____;____)
   {
      if( NotReferencedElsewhere(record) )
      {
        // Delete record
        _______;
      }
   }
}
Foi útil?

Solução

De acordo com esta:

http://msdn.microsoft.com/ en-us / library / 0h4c3zkw (VS.80) .aspx

RemoveAtPos tem essa semântica

Remove o par chave / valor armazenado na posição especificada. A memória usada para armazenar o elemento é liberado. A posição referenciado por pos torna-se inválido, e enquanto a posição de quaisquer outros elementos no mapa permanece válido, eles não necessariamente manter a mesma ordem.

O problema é que a ordem pode mudar - o que significa que GetNext () realmente não vai continuar a iteração. Parece que você precisa coletar as posições que deseja excluir em uma passagem e excluí-los na próxima. A remoção de uma posição não invalida os outros objetos POSIÇÃO

Outras dicas

Meu primeiro pensamento seria a salvar a posição atual antes de chamar GetNext, então, se você excluir o elemento que você pode redefini-la. No entanto, talvez a forma mais segura seria a criação de um novo mapa que contém os elementos que você deseja manter, então você pode estar contando com a forma como a implementação interna de obras posição.

Eu não estou muito familiarizado com CAtlMap, mas se é semelhante ao tipo map do STL, em seguida, o Rob "primeiro pensamento" é seguro - excluir um item não afeta nenhum iterators exceto o (s) apontando para o item a ser excluído.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top