Est-il un sorted_vector classe, qui prend en charge insert (), etc.?

Souvent, il est plus efficace d'utiliser une triés std::vector au lieu d'un std::set. Personne ne sait d'une bibliothèque de classe sorted_vector, qui, fondamentalement, a une interface similaire à std::set, mais insère des éléments dans le vecteur trié (de sorte qu'il n'y a pas de doublons), utilise les binaires de recherche à find éléments, etc.?

Je sais c'est pas dur à écrire, mais probablement mieux de ne pas perdre de temps, et d'utiliser une implémentation existante de toute façon.

Mise à jour: La raison de l'utilisation d'un vecteur trié au lieu d'un jeu est la suivante: Si vous avez des centaines de milliers de petits ensembles qui contiennent seulement 10 ou si des membres de chacun, il est plus efficace de la mémoire de l'utiliser juste trié les vecteurs de la place.

  • Pourriez-vous être plus précis sur ce en std::set n'est pas assez efficace?
  • Si vous avez des centaines de milliers de petits ensembles qui contiennent seulement 10 ou si des membres de chacun, il est plus efficace de la mémoire de l'utiliser juste trié les vecteurs de la place.
  • Je ne pense pas qu'il y a un ready-made de classe pour que. Vous pouvez écrire votre propre ou de l'utilisation lower_bound() pour l'insertion et la binary_search() pour la recherche.
  • Si les vecteurs sont de petite taille, la différence entre le binaire et de la recherche séquentielle est susceptible d'être trop petite, de sorte que vous pouvez simplement utiliser un std::vector.
  • La différence va probablement être très importantes à cause de la cache que le jeu va subir.
  • Je suis en train d'écrire ce conteneur. J'en aurais fait en une semaine (avec StackOverflow de l'aide! 🙂 Où est le meilleur endroit pour partager ce code?
  • G: Peut-être télécharger sur google code ou à github et poster le lien ici?
  • C'est par ici: stackoverflow.com/questions/3125905/... . S'il vous plaît laissez-moi savoir si vous faites des améliorations.
  • Je suis un peu en retard à cette question, mais de toute façon 🙂 Vous devriez vérifier si le binaire de recherche triés vecteur de "10" éléments est plus vite que juste une recherche linéaire. Il est tout à fait possible qu'il n'est pas plus rapide, ou il pourrait même être plus lent que le processeur de la direction de la prévision va jouer un rôle important dans ce cas.
  • Document lié par Matt Austern: Pourquoi Vous ne devriez pas Utiliser jeu, et Ce que Vous Devez Utiliser à la Place.

InformationsquelleAutor Frank | 2010-04-25