Coup de pouce.Conteneur flat_set
Coup de pouce.Conteneur flat_[multi]carte/jeu de conteneurs sont commandés en vectoriel conteneurs associatifs basés sur Austern et Alexandrescu de lignes directrices. Ces commandé vecteur de conteneurs ont également bénéficié récemment avec l'ajout de la sémantique de déplacement de C++, l'accélération de l'insertion et de l'effacement considérablement les temps. Plat conteneurs associatifs ont les attributs suivants:
- Plus rapide de recherche que les conteneurs associatifs
- Beaucoup plus rapide itération que les conteneurs associatifs
- Moins de consommation de mémoire pour les petits objets (et pour les grands objets si shrink_to_fit est utilisé)
- L'amélioration des performances du cache (les données sont stockées dans la mémoire contiguë)
- Non stables itérateurs (itérateurs sont invalidés lors de l'insertion et de l'effacement d'éléments)
- Non-copiable et non délocalisables types de valeurs ne peuvent pas être stockés
- Affaiblissement de l'exception de sécurité que les conteneurs associatifs (copier/déplacer les constructeurs peuvent jeter lors du changement de valeurs dans des ratures et des insertions)
- Plus lent de l'insertion et de l'effacement que les conteneurs associatifs (spécialement pour les non-mobiles types)
Démonstration en direct:
#include <boost/container/flat_set.hpp>
#include <iostream>
#include <ostream>
using namespace std;
int main()
{
boost::container::flat_set<int> s;
s.insert(1);
s.insert(2);
s.insert(3);
cout << (s.find(1)!=s.end()) << endl;
cout << (s.find(4)!=s.end()) << endl;
}
jalf.com: Si vous voulez un vecteur trié, il est probablement préférable d'insérer tous les éléments, et ensuite appeler std::sort() une seule fois, après les insertions.
boost::flat_set cad le faire automatiquement:
template<typename InputIterator>
flat_set(InputIterator first, InputIterator last,
const Compare & comp = Compare(),
const allocator_type & a = allocator_type());
Effets: la construction d'un ensemble vide à l'aide de la comparaison spécifié objet et l'allocateur, et insère des éléments de l'intervalle [first ,last ).
ComplexitéLinéaire en N, si l'intervalle [first ,last ) est déjà triés à l'aide de comp et sinon N*log(N), où N est le dernier - premier.