J'ai deux vecteurs de la forme std::vector<int> a
et std::vector<double> b
, par exempleconstatation et doublons effacement dans un vecteur et l'effacement des valeurs dans un autre vecteur
a= 1,2,3,3,4,5,6;
b=0.1, 0.3, 0.2, 0.5, 0.6, 0.1, -0.2;
les deux vecteurs sont de la même taille et en fait, ils fonctionnent comme une Paire XY ((1,0.1) , (2,0.3)...etc)
. Heureusement, a
est triée de moins à plus toujours
Je veux trouver les doublons dans le premier vecteur, puis effacer le premier d'entre eux, dans mon exemple, la sortie doit être:
a= 1,2,3,4,5,6;
b=0.1, 0.3, 0.5, 0.6, 0.1, -0.2;
dans Matlab I ferait quelque chose comme ceci:
b(find(diff(a) == 0)) = [];
a(find(diff(a) == 0)) = [];
Je sais que je peux le faire à l'ancienne en utilisant des boucles et si des déclarations mais je suis sûr qu'il ya un moyen de faire plus élégant en C++ avec des conteneurs et itérateurs. En cherchant sur Internet, il y a beaucoup d'exemples pour effacer le doublon dans le premier vecteur mais pas pour utiliser les mêmes index pour effacer les éléments du deuxième vecteur.
Toute aide est appréciée.
Ensuite, il devient trivial de faire ce que vous voulez. – NathanOliver
Ou peupler vos données dans un 'std :: map' initialement, et vous n'aurez plus besoin d'effacer les doublons puisque la carte ne supporte pas les clés dupliquées –
Est-ce que vous stockez vraiment '0.3' dans votre vecteur' int'? – Galik