Il y a toujours bitset où vector<bool> si le numéro d'identifiant
supérieur est pas trop grand.
--
Michael
Que faites vous de l'identifiant par la suite ?
Si c'est pour accéder à un objet, pourquoi, dans ce cas,
ne pas placer un pointeur de ce dernier dans la map à la place du
bool ?
--
-Stan
> Il y a toujours bitset o� vector<bool> si le num�ro d'identifiant
> sup�rieur est pas trop grand.
std::vector<bool> n'est pas standard <http://www.gotw.ca/gotw/050.htm>
--
Micka�l Wolff aka Lupus Michaelis
http://lupusmic.org
Tu devrais rester simple.
// On pourrait g�n�raliser
bool is_in(std::vector<int> const & container, int presumed)
{
return identifiers.end() != std::find_if(identifiers.begin(),
identifiers.end(), std::bind2nd(std::equal<int>(), presumed)) ;
}
int main()
{
std::vector<int> identifiers ;
identifiers.push_back(10) ;
/* some pushes */
if(is_in(identifiers, 10))
/* On a trouv� */ ;
>std::vector<bool> n'est pas standard
Si. Il fonctionne m�me parfaitement bien.
En revanche, il n'est pas consid�r� comme un conteneur standard.
la performance est importante dans mon cas, c'est pourquoi je me disais
qu'une recherche dans un conteneur ordonn� (comme un set) serait plus rapide
Peut-�tre que le mieux est que je teste tout �a :-)
Merci de ta r�ponse
>la performance est importante dans mon cas, c'est pourquoi je me disais
>qu'une recherche dans un conteneur ordonn� (comme un set) serait plus rapide
La recherche dans un std::set<> est effectivement plus rapide. Remplir
ce std::set<> au d�part peut, en revanche, prendre un peu de temps.
Mais, plus important, le conteneur "naturel" pour ce que tu veux faire
est bien std::set<>. L'utiliser ne peut qu'am�liorer la lisibilit� de
ton code.
C'est un conteneur standard dans le sens ou il est dans le standard (C+
+98): §23.2.5. Autant que je vois, il a la sémantique d'un container
standard, bien que sa représentation interne ne soit pas conforme (et
même dangereuse en multithreadé).
Ce qui pose réellement problème, c'est dans les templates, il faut à
chaque fois le traiter comme un cas particulier parcequ'il retourne un
proxy (comme mentionner dans le lien Gotw).
Mais pour un cas comme ici, il peut être utile.
--
Michael
Il y a aussi le unordered_set (aka hash_set) qui te donnerait un test
en temps constant.
Tout dépend en fait du nombre d'entier possible et leur répartition.
--
Michael
> Mais pour un cas comme ici, il peut �tre utile.
Bon, d�sol� les gars, j'ai jet� le b�b� avec l'eau du bain :D
> la performance est importante dans mon cas, c'est pourquoi je me disais
> qu'une recherche dans un conteneur ordonn� (comme un set) serait plus
> rapide
> Peut-�tre que le mieux est que je teste tout �a :-)
> Merci de ta r�ponse
En fait, ce que je ne comprenais pas, c'�tait pourquoi tu voulais
absolument avoir une cl� pour acc�der � l'entier. Mais si std::set
convient mieux que std::vector, alors je ne vois pas le probl�me. Comme
dis, c'�tait juste pour proposer quelque chose de plus basique que ce �
quoi tu pensais (pour une fois que je pense simple, j'en profite).
> Tu devrais rester simple.
Toi aussi :
>// On pourrait g�n�raliser
>bool is_in(std::vector<int> const & container, int presumed)
>{
> return identifiers.end() != std::find_if(identifiers.begin(),
>identifiers.end(), std::bind2nd(std::equal<int>(), presumed)) ;
return identifiers.end() !=
std::find (identifiers.begin(), identifiers.end(), presumed);
Certes :D