Enum dynamique en c++

Signaler
Messages postés
44
Date d'inscription
jeudi 12 juin 2008
Statut
Membre
Dernière intervention
28 mars 2009
-
Messages postés
14
Date d'inscription
vendredi 14 mai 2010
Statut
Membre
Dernière intervention
9 mars 2011
-
comment je definis une enumeration en C++ avec des valeurs que je ne les obtiens que d'une facon dynamique ?

4 réponses

Messages postés
15189
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
29 novembre 2021
100
Salut,
Il n'est pas possible de construire un enum dynamiquement. Je te conseilles donc un tableau, un vecteur, ou bien une map, tout dépend de ce que tu veux faire

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
44
Date d'inscription
jeudi 12 juin 2008
Statut
Membre
Dernière intervention
28 mars 2009

Merci pour ta reponse;
voila le un exemple qui ressemble au code que je suis en trai de l'ecrire :



enum nodes {
    Troy, LakePlacid, Plattsburgh, Massena, Watertown, Utica,
    Syracuse, Rochester, Buffalo, Ithaca, Binghamton, Woodstock,
    NewYork, N
  };
  const char *name[] = {
    "Troy", "Lake Placid", "Plattsburgh", "Massena",
    "Watertown", "Utica", "Syracuse", "Rochester", "Buffalo",
    "Ithaca", "Binghamton", "Woodstock", "New York"
  };
  location locations[] = { // lat/long
    {42.73, 73.68}, {44.28, 73.99}, {44.70, 73.46},
    {44.93, 74.89}, {43.97, 75.91}, {43.10, 75.23},
    {43.04, 76.14}, {43.17, 77.61}, {42.89, 78.86},
    {42.44, 76.50}, {42.10, 75.91}, {42.04, 74.11},
    {40.67, 73.94}
  };
  edge edge_array[] = {
    edge(Troy,Utica), edge(Troy,LakePlacid),
    edge(Troy,Plattsburgh), edge(LakePlacid,Plattsburgh),
    edge(Plattsburgh,Massena), edge(LakePlacid,Massena),
    edge(Massena,Watertown), edge(Watertown,Utica),
    edge(Watertown,Syracuse), edge(Utica,Syracuse),
    edge(Syracuse,Rochester), edge(Rochester,Buffalo),
    edge(Syracuse,Ithaca), edge(Ithaca,Binghamton),
    edge(Ithaca,Rochester), edge(Binghamton,Troy),
    edge(Binghamton,Woodstock), edge(Binghamton,NewYork),
    edge(Syracuse,Binghamton), edge(Woodstock,Troy),
    edge(Woodstock,NewYork)
  } ;
 
c'est une partie d'un code qui cherche la distance minimale entre deux villes.
Mais le code que je cherche a realiser cherche la distance minimale entre deux noeuds d'une carte d'OpenStreetMap.
Donc l'idee est au lieu de ces noms de ville j'ecris N+le ID des noeuds(par exemple : N256) que je l'ai obtiens que d'une facon iterative et qui peuvent etre modifies aussi
Messages postés
15189
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
29 novembre 2021
100
Je ne vois pas pourquoi tu as besoin d'enum. Tu peux dire que "N+ID" est stockée dans une chaine de caractères et du coup, tu gardes le prototype de name[]

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
14
Date d'inscription
vendredi 14 mai 2010
Statut
Membre
Dernière intervention
9 mars 2011

N'oubliez pas que les enum ne servent qu'à donner un "nom" à un entier.

enum{vrai, faux};
//équivaut à
const int vrai = 0;
const int faux = 1;

Ça ne sert qu'à l'édition et l'utilisation du code.
A l'exécution, la notion d'enum n'existe pas.

Pour calculer les distances, il faut passer par des algorithmes mathématiques.