J'ai beaucoup de vecteurs (de l'ordre de 10^4, et même plus!) Et j'obtiendrai plus de vecteurs en entrée du flux. Ainsi, par exemple, jeEst-ce que ce vecteur est survenu avant
v1 = 1 0 4 1 1
v2 = 1 1 2 5 3 6 2
v3 = 0 1 1 5 0
je 10^4 ces vecteurs Maintenant, je reçois en entrée un vecteur v4 = 0 1 1 5 0
, et je veux vérifiez s'il est apparu avant ou non, comment me suggérez-vous de faire cela?
Je vais énumérer les techniques que j'ai pensé, et les erreurs qui les accompagnent:
- Pour utiliser
std::map
oustd::set
pour la même. Mais,std::map std::set
ne supporte pas le vecteur comme argument. - Pour convertir chaque nombre entier en vecteur en type de chaîne, ajoutez-les dans l'ordre et stockez la chaîne dans la carte. Erreur: Le cas de
v5 = 11 1 1 1
etv6 = 1 1 1 1 1
sera affiché comme identique. - Similaire à ci-dessus, juste pour ajouter un délimiteur après chaque entier. Erreur: Trop fastidieux pour coder?
Je voulais savoir si vous pouvez penser à une méthode pour y parvenir?
Modifier: pour 10^4, c'est réalisable. Ma nouvelle tâche m'oblige à stocker jusqu'à 10^9. Personnellement, je ne pense pas que STL a autant d'espace, ils ont jeté SIGABRT erreur. Connaissez-vous une autre méthode de hachage efficace qui peut fonctionner dans ce cas?
Conversion d'un vecteur à une chaîne séparée par des virgules ne doit pas être très fastidieux. Cela semble être la manière la plus simple de résoudre cela. – Barmar
Je pense qu'une fonction de hachage aiderait –
Avez-vous envisagé un [filtre Bloom] (https://en.wikipedia.org/wiki/Bloom_filter)? –