Je suis plus circonspect que toi. J'ai eu il y a quelques années une discussion (houleuse) sur ce sujet précis avec Dave Eberly, et j'en suis arrivé à comprendre et approuver son point de vue.
Les conteneurs de la C++SL sont génériques. En tant que tels, et même si des efforts importants ont été fait pour améliorer les performances, il y a quand même de fortes chances qu'ils ne soient pas aussi performants qu'un code moins générique et complètement dédié à une tâche particulière. Dire le contraire, ce serait prétendre que "one size fits all", et que SQL devrait être utilisé par Google pour stocker les infos qu'il récupère pour chaque page d'un site. Google n'est pas d'accord avec ça, et préfère justement une approche NoSQL.
Quoi qu'il en soit, ce genre d'informations (faut-il le faire ?) est un problème d'optimisation : une décision ne peut être prise qu'après avoir 1) vérifier que le code actuel posait des problèmes de performances 2) implémenté une autre solution 3) vérifier que cette solution est plus rapide.
Il existe de nombreux cas dans lesquels les conteneurs de la C++SL peuvent être mis au rencard pour implémenter d'autres conteneurs. Prenons un cas simple : je dois stocker de manière contiguë 16 milliards d'objets, chaque objets faisant 64 bytes. Si je les garde tous en mémoire dans un std::vector<>, je risque fort d'avoir des soucis même sur mon hyper-puissant octocore avec 24 GB de mémoire (non, je n'ai pas une telle machine
).
Puisqu'il est tout à fait légitime de se poser la question dans ce cas, pourquoi ne le serait-il pas dans certains autres cas particuliers ?
Partager