Quel est le moyen le plus rapide de l'insertion/mise à jour std::unordered_map éléments sans l'aide d'un si?

J'ai actuellement beaucoup de code qui ressemble à ceci:

std::unordered_map<int,int> my_dict;
.
.
.
//If the key does exist in the dictionary
if(my_dict.count(key) == 1){
    my_dict[key] = value;
}

//If its a new key
else{
    my_dict.insert(std::make_pair(key,value));
}

Est il possible que je peux de la vitesse d'écrasement de la valeur à chaque fois?

  • On dirait que vous devez utiliser une carte
  • Je veux O(1) moment de l'insertion? Je ne veux pas d'un arbre O log(N)
  • le [] est-ce. cplusplus.com/reference/unordered_map/unordered_map/operator[] bien sûr, la complexité doit être linéaire. Si vous voulez moins de l'insertion, l'utilisation d'une carte
  • my_dict[key] = value; est tout que vous avez besoin d'aide, si nécessaire.
  • linéaire est que le pire des cas. si vous êtes uniquement intéressé au coût amorti, le passage à la carte est une très mauvaise idée.
  • Les chances d'être linéaire, est extrêmement dérivés cas. Il la plupart des cas, il sera O(1) ou très proche.
  • Vous avez raison, je viens de réaliser que non ordonnée carte utilise aussi certains seau comme mécanisme de stockage.
  • ont ajouté un edit
  • Utilisation (*my_dict_ptr)[key] ou my_dict_ptr->operator[](key) ensuite.
  • Si vous souhaitez mettre à jour la valeur à chaque fois, puis il suffit d'aller pour my_dict[clé] = valeur. Toutefois, si vous ne voulez pas mettre à jour la valeur d'une clé existante, puis votre code est correct (et plus rapide).

InformationsquelleAutor user997112 | 2013-10-05