OVH Cloud OVH Cloud

Insertion d'un entier dans un map

16 réponses
Avatar
Guillaume
Bonjour =E0 tous,

imaginons que j'ai un std::map<int,int>, et que j'utilise l'operateur
[] pour acc=E9der =E0 un =E9l=E9ment inexistant:

std::map<int,int> m;
std::cout << m[0];

Que se passe-t-il alors? Est-on garanti qu'un nouvel entier acc=E9d=E9 de
cette mani=E8re soit toujours initialis=E9 =E0 0? Et comment est-ce
possible?

Merci pour vos lumi=E8res!

6 réponses

1 2
Avatar
Stan
On 29 jan, 14:38, Jean-Marc Bourguet wrote:

> Les autres messages te donnent la r ponse. J'ajoute que si tu as une
> map<K,V> et que tu utilises [], alors V doit avoir un constructeur par
> d faut. Si c'est g nant, tu peux utiliser at() au lieu de operator[].
> at() d clenche une exception plut t que d'ins rer en silence lorsque
> tu acc des un l ment inexistant. Je ne sais pas si c'est standard
> (j'esp re parce que je n'utilise que a).

Ou je suis encore plus fatigue que je le pense, ou ce n'est pas standard.




Si si... sur les vectors ;-)

Je pense qu'il y a eu confusion.
--
-Stan
Avatar
Jean-Marc Bourguet
Stan writes:

On 29 jan, 14:38, Jean-Marc Bourguet wrote:

> > Les autres messages te donnent la r ponse. J'ajoute que si tu as une
> > map<K,V> et que tu utilises [], alors V doit avoir un constructeur par
> > d faut. Si c'est g nant, tu peux utiliser at() au lieu de operator[].
> > at() d clenche une exception plut t que d'ins rer en silence lorsque
> > tu acc des un l ment inexistant. Je ne sais pas si c'est standard
> > (j'esp re parce que je n'utilise que a).
>
> Ou je suis encore plus fatigue que je le pense, ou ce n'est pas standard.

Si si... sur les vectors ;-)



Ca je le savais. Il y a aussi les deque et en general, les sequences ou
c'est implementable en temps constant devraient le fournir.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
Alain Ketterlin
Jean-Marc Bourguet writes:

Alain Ketterlin writes:



Les autres messages te donnent la réponse. J'ajoute que si tu as une
map<K,V> et que tu utilises [], alors V doit avoir un constructeur par
défaut. Si c'est génant, tu peux utiliser at() au lieu de oper ator[].
at() déclenche une exception plutôt que d'insérer en sile nce lorsque
tu accèdes à un élément inexistant. Je ne sais pas s i c'est standard
(j'espère parce que je n'utilise que ça).



Ou je suis encore plus fatigue que je le pense, ou ce n'est pas standard.



Ah, ouais, t'as raison. Bon, je me console en me disant que c'est
mentionné dans la "Active Issues List", au numéro DR464
(http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html)

-- Alain.
Avatar
Stan
On 29 jan, 16:55, Alain Ketterlin wrote:

Ah, ouais, t'as raison. Bon, je me console en me disant que c'est
mentionné dans la "Active Issues List", au numéro DR464
(http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html)




Quelle bibliothèque utilises-tu ?

--
-Stan
Avatar
Alain Ketterlin
Stan writes:

Ah, ouais, t'as raison. Bon, je me console en me disant que c'est
mentionné dans la "Active Issues List", au numéro DR464
(http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html)




Quelle bibliothèque utilises-tu ?



C'est la GNU ISO C++ Library, qui accompagne g++ 4.4.1.

-- Alain.
Avatar
Eric.Malenfant
On 29 jan, 10:55, Alain Ketterlin wrote:
Jean-Marc Bourguet writes:
> Alain Ketterlin writes:
>> Les autres messages te donnent la réponse. J'ajoute que si tu as une
>> map<K,V> et que tu utilises [], alors V doit avoir un constructeur par
>> défaut. Si c'est génant, tu peux utiliser at() au lieu de operator [].
>> at() déclenche une exception plutôt que d'insérer en silence lor sque
>> tu accèdes à un élément inexistant. Je ne sais pas si c'est st andard
>> (j'espère parce que je n'utilise que ça).

> Ou je suis encore plus fatigue que je le pense, ou ce n'est pas standar d.

Ah, ouais, t'as raison. Bon, je me console en me disant que c'est
mentionné dans la "Active Issues List", au numéro DR464
(http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html)




Et dans le dernier draft de C++0x: 23.4.1.2 dans n3000
1 2