2009-11-05 8 views
2

Y a-t-il une structure de données qui stocke ses éléments de manière unique (pour un Functor de comparaison) mais répond aux requêtes de l'élément le plus élevé à une autre comparer-Fonction?Structure de données qui stocke des éléments uniques mais répond aux requêtes d'un autre ordre en C++

Par exemple: J'ai une classe avec deux propriétés:
1) la taille
2) la valeur

Je voudrais avoir une structure de données qui stocke tous les éléments concernant uniquement sa taille, mais les réponses requêtes pour l'élément avec la valeur la plus élevée.
Utiliser std :: set avec un foncteur de comparaison pour les tailles me donne l'unicité mais les requêtes pour la valeur la plus élevée auront un temps d'exécution linéaire ...
Y a-t-il un meilleur moyen?

(je vais « ajouter des éléments alors demander la valeur la plus élevée » et garder itérer ce jusqu'à ce qu'un certain point de terminaison est atteinte)

Toute information serait apprécié (papiers, etc.)

Répondre

8

Boost::MultiIndex vient à l'esprit.

+1

Vous me battez pour ça. –

+0

Bonjour, merci à tous pour vos réponses! Il me semble que cela devrait/pourrait être une connaissance générale, donc je vais devoir me familiariser avec le boost lib ... – Dane

+0

@Dane: ça ne fait pas mal;) Mais je n'aurais pas connu de cette lib particulière si je n'avais pas cherché quelque chose de similaire quelque temps auparavant. – peterchen

0

Pourrait-il s'agir d'un kd-tree (arbre k-dimensionnel)? Dans votre cas, k serait 2.

+0

Je suppose ... mais il est beaucoup plus compliqué d'implémenter cette solution de Peter –

1

Ce que vous voulez peut être réalisé en utilisant la bibliothèque Boost.Multi-index

Vérifiez notamment this example dans le tutoriel, qui est très proche de votre cas d'utilisation.