2010-06-03 8 views
2

Je dois stocker un grand nombre d'entiers. Il peut y avoir dupliqués dans le flux d'entrée des entiers, j'ai juste besoin de pour stocker distinct parmi eux. J'utilisais stl ensemble initialement mais il est sorti OutOfMem quand nombre d'entiers d'entrée est allé trop haut. Je suis à la recherche d'une bibliothèque de conteneurs C++ qui me permettrait de stocker des numéros avec cette exigence éventuellement soutenu par le fichier i.e conteneur ne devrait pas essayer de garder tous les numéros en mémoire. Je n'ai pas besoin de stocker ces données de manière persistante, j'ai juste besoin de trouver valeurs uniques parmi elle.Stl réglable comme conteneur pour C++

+0

Quelle est la plage de valeurs entières? – sbk

+1

Je suis trop gêné pour appeler cela une réponse, mais peut-être que vous pourriez simplement reconstruire votre application pour 64 bits et l'exécuter sur un système 64 bits. – OldFart

+0

Le problème est que le mem principal n'est pas assez grand pour contenir tous les nombres et nous avons besoin d'un ensemble externe comme mem-backed. – Pqr

Répondre

0

Puisque vous avez besoin plus que la RAM vous permet peut-être regarder memcached

+0

memcached? Pourriez-vous s'il vous plaît expliquer comment cela peut être utilisé? – Pqr

1

Jetez un oeil à la STXXL; pourrait être ce que vous cherchez.

Edit: Je n'ai pas utilisé moi-même, mais à partir de la documentation - vous pouvez utiliser stream::runs_creator pour créer pistes triées de vos données (cependant FITS beaucoup en mémoire), puis stream::runs_merger de fusionner les flux triés, et enfin utiliser stream::unique pour filtrer les uniques.

+0

Je viens de regarder stlxxl. À première vue, il ne semble pas avoir quelque chose comme stl :: set. – Pqr

+0

Vous devrez utiliser une approche de fusion-tri; voir mon edit. – tzaman

0

Avez-vous envisagé d'utiliser DB (peut-être SQLite)? Ou ce serait trop lent?

+0

Ce serait trop lent, je suppose. – Pqr

0

Vous devriez sérieusement essayer au moins une base de données avant de conclure qu'il est trop lent. Tout ce dont vous avez besoin est l'un des poids lourds magasin de valeur-clé. Dans le passé, j'ai utilisé Berkeley DB, mais voici un list of other ones.

Questions connexes