OVH Cloud OVH Cloud

map et operateur []

58 réponses
Avatar
Fanny Chevalier
Bonjour,

Voila, j'ai fait une map :
map <CoupleInt, double>myMap;
destinée a accueillir une valeur relative a un couple d'entiers
CoupleInt dont la syntaxe de classe est la suivante :

class CoupleInt
{
public:
CoupleInt();
CoupleInt(int, int);
CoupleInt(const CoupleInt&);
~CoupleInt();

private:
int first;
int second;
};

Lorsque je fais l'appel (par exemple)
double myDoubleValue = 3.02;
CoupleInt couple = CoupleInt(3,2);
myMap[couple] = myDoubleValue;

il n'a pas l'air d'aimer myMap[couple].

Une idée?

Merci pour votre aide
Fanny

10 réponses

1 2 3 4 5
Avatar
Fabien LE LEZ
On 09 Oct 2004 18:05:44 +0200, James Kanze :

entdoppeldeutigen


Pour le coup, ça ressemble à une chanson de Barbara...


--
;-)

Avatar
Fabien LE LEZ
On 09 Oct 2004 12:38:23 +0200, James Kanze :

Je crois que la plupart des gens considère ça plutôt un boggue


Yep. D'ailleurs, je trouve qu'un bon compilo devrait balancer un
warning dès qu'on déclare une fonction à l'intérieur du corps d'une
autre fonction.


--
;-)

Avatar
Matthieu Moy
James Kanze writes:

Benoît Dejean writes:

|> Le Sat, 09 Oct 2004 12:38:23 +0200, James Kanze a écrit :

|> > désambuiguer :

|> joli. <clap clap>

|> j'arrive même pas à le prononcer :)

Peut-être si je l'avais écrit : « désambigüer » ? Encore que pour la
prononciation...:-). (C'est à peu près ce que j'ai voulu écrire, en tout
cas.)


,----[ http://granddictionnaire.com/ ]
| désambiguïser v.
|
|
| Définition :
| Lever une ambiguïté.
`----

Ca vous plait ?

--
Matthieu

Avatar
James Kanze
Fabien LE LEZ writes:

|> Ben... franchement, je n'ai encore jamais eu l'occasion d'utiliser
|> std::pair<>. Je me demande même si cette classe n'a pas été créée
|> uniquement comme helper pour std::map<>.

Si c'était le cas, est-ce que tu ne penses pas que ses membres
s'appeleront plutôt key et value ?

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Avatar
James Kanze
Matthieu Moy writes:

|> ,----[ http://granddictionnaire.com/ ]
|> | désambiguïser v.
|> |
|> |
|> | Définition :
|> | Lever une ambiguïté.
|> `----

|> Ca vous plait ?

J'achète.

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Avatar
Loïc Joly
James Kanze wrote:
Fabien LE LEZ writes:

|> Ben... franchement, je n'ai encore jamais eu l'occasion d'utiliser
|> std::pair<>. Je me demande même si cette classe n'a pas été créée
|> uniquement comme helper pour std::map<>.

Si c'était le cas, est-ce que tu ne penses pas que ses membres
s'appeleront plutôt key et value ?


Dans un langage ou remove n'enlève pas, et ou un set nécessite une
relation d'ordre, pas vraiment...

Il est vrai que moi aussi je n'ai jamais utilisé ce type de structure
autrement qu'à proximité d'une map, ni d'ailleurs de tuples. Mais des
gens semblent trouver ça utile, pour des raisons qui me sont encore
inconnues.

--
Loïc

Avatar
Gabriel Dos Reis
Loïc Joly writes:

| Il est vrai que moi aussi je n'ai jamais utilisé ce type de structure
| autrement qu'à proximité d'une map, ni d'ailleurs de tuples. Mais des
| gens semblent trouver ça utile, pour des raisons qui me sont encore
| inconnues.

Je l'utilise de temps à autre, non pas comme le value_type de map,
mais comme le key_type de map ou set. Par exemple, dans mon
implémentation expérimentale de IPR, j'ai

// -- Binary_factory<> --
template<class Interface, class Cat_impl = Expr_impl<Interface> >
struct Binary_factory {
typedef typename Interface::Arg1_type First;
typedef typename Interface::Arg2_type Second;

Cat_impl*
make(const First* a, const Second* b)
{
return const_cast<Impl*>(&*data.insert(Impl(a, b)).first);
}

Cat_impl*
make(const First* a, const Second* b, const Type* t)
{
Cat_impl* r = make(a, b);
if (!r->type_impl().is_valid())
r->type_impl() = t;
return r;
}

private:
struct Impl : Cat_impl {
struct Comparator {
bool operator()(const Impl& a, const Impl& b) const
{ return a.rep < b.rep; }
};

Impl(const First* a, const Second* b) : rep(a, b) { }
const First& first() const { return *rep.first; }
const Second& second() const { return *rep.second; }
void accept(Visitor& v) const { v.visit(*this); }

private:
std::pair<const First*, const Second*> rep;
};

std::set<Impl, typename Impl::Comparator> data;
};

et quelque chose de similaire pour Ternary_factory<>. Tout ce qui
m'intéresse ici dans std::pair<>

(1) c'est une structure à deux champs; leurs noms m'importent peu;
(2) si j'ai une relation d'ordre sur chaque champ, alors
automatiquement j'ai une relation (lexicographique) sur la paire.


Contrairement à std::remove ou std::map, je trouve que std::pair porte
bien son nom. Pas toi ?

-- Gaby
Avatar
Loïc Joly
Gabriel Dos Reis wrote:


Contrairement à std::remove ou std::map, je trouve que std::pair porte
bien son nom. Pas toi ?


Si, pair a un bon nom. Je répondait juste à la logique de James qui
voulait que puisque pair utilise first et second au lieu de key et
value, alors il y ait forcément d'autres utilités de cette classe
qu'avec map.

Avatar
Andre Heinen
On Sat, 09 Oct 2004 18:12:36 +0200, Fabien LE LEZ
wrote:

Ben... franchement, je n'ai encore jamais eu l'occasion d'utiliser
std::pair<>. Je me demande même si cette classe n'a pas été créée
uniquement comme helper pour std::map<>.


J'ai déjà eu quelques occasions de l'utiliser.

--
Andre Heinen
My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz

Avatar
Fabien LE LEZ
On Mon, 11 Oct 2004 13:46:44 +0200, Andre Heinen
:

J'ai déjà eu quelques occasions de l'utiliser.


Dans quel(s) cas ?


--
;-)

1 2 3 4 5