Classifique std :: vector <int> mas ignore um determinado número
eu tenho umstd::vector<int>
do tamanho 10 e cada entrada é inicialmente -1. Esse vetor representa uma tabela de classificação para o meu jogo (pontuações mais altas) e -1 significa que não há pontuação para essa entrada.
std::vector<int> myVector;
myVector.resize(10, -1);
Quando o jogo é iniciado, desejo carregar a pontuação mais alta de um arquivo. Carrego cada linha (até 10 linhas), converto o valor encontrado em umint
comstd::stoi
e, se o número for> 0, substituo-o pelo -1 atualmente no vetor na posição atual.
Tudo isso funciona. Agora, para o problema:
Como os valores no arquivo não são necessariamente classificados, quero classificarmyVector
depois de carregar todas as entradas. Eu faço isso com
std::sort(myVector.begin(), myVector.end());
Isso classifica em ordem crescente (a pontuação mais baixa é melhor no meu jogo).
O problema é que, como o vetor é preenchido inicialmente com -1 e não há necessariamente 10 entradas salvas no arquivo de pontuações mais altas, o vetor pode conter alguns -1 além das pontuações do jogador.
Isso significa que, ao classificar o vetor com o código acima, todo o -1 aparecerá antes da pontuação do jogador.
Minha pergunta é: Como classifico o vetor (em ordem crescente), mas todas as entradas com -1 serão colocadas no final (já que não representam uma pontuação real)?