2014-09-13 4 views
1
#include <iostream> 

using namespace std; 

class item { 
    int size; 
    int value[30]; 
    char key[30][20]; 
    int n, k; 
    int index; 
    char* a[30], *b[30], search, remove; 

public: 


    void putdatavalue(void) { 
     for (int i = 0; i < size; i++) { 
      cout << value[i] << "," 
       << "\n"; 
     } 
    } 

    void display(void) { 
     for (int i = 0; i < size; i++) { 
      cout << "(" << key[i] << "," << value[i] << ")" 
       << "\n"; 
     } 
    } 


}; 

void item::getdata(void) { 
    cout << "entr size\n"; 
    cin >> size; 
    for (int i = 0; i < size; i++) { 
     cout << "entr key\n"; 
     cin >> key[i]; 
     cout << "entr value\n"; 
     cin >> value[i]; 
    } 
    cout << "chk whether keys are different \n"; 
    for (int i = 0; i < size; i++) { 
     a[i] = key[i]; 
     b[i] = key[i + 1]; 
     if (*a[i] == *b[i]) { 
      cout << "key" << i << "and key" << i + 1 << "are same\n"; 
      cout << "re-entr key\n"; 
      cin >> key[i + 1]; 
     } else { 
      cout << "key[" << i << "] and key[" << i + 1 << "] are diff\n"; 
     } 
    } 
} 

int main() { 

    item obj1; 
    obj1.getdata(); 
    int m; 
    do { 
     cout << "choose ur option and enter appropriate no" 
      << "\n"; 

     cout << "\n1 : display keys \n"; 
     cout << "\n2 : display value \n"; 
     cout << "\n3 : display key-value pair \n"; 
     cout << "\n4 : add a key-value pair \n"; 
     cout << "\n5 : remove a key-value pair \n"; 
     cout << "\n6 : search for key and its value \n"; 
     cout << "\n7 : quit \n"; 
     cin >> m; 

     switch (m) { 

      break; 

      case 1: { 
       obj1.putdatakey(); 
      } break; 
      case 2: { 
       obj1.putdatavalue(); 
      } break; 
      case 3: { 
       obj1.display(); 
      } break; 

      case 7: 
       break; 

      default: 
       cout << "error in input \n"; 
     } 
    } while (m != 7); 
    return 0; 
} 

Je suis supposé créer un dictionnaire de key-value paires en C++ avec les fonctions suivantes: touches d'affichage, les valeurs d'affichage, afficher paires clé-valeur, ajoutez un Key- valeur, supprime une paire clé-valeur, détermine si une clé est présente et renvoie la valeur.créer un dictionnaire de paires de valeurs clés en C++

Le dictionnaire devrait être vide.

Vous devez surcharger le operator+ pour faire le union de deux dictionnaires et si les dictionnaires contiennent chacun la même clé, envoyer un message d'erreur.

Mon professeur nous a demandé de ne pas utiliser strings et vectors donc j'utilisé des tableaux je suis coincé avec la fonction syndicale et ne sais pas comment le faire. Plz m'aider.

+0

Si vous y êtes autorisé, utilisez 'std :: map' ... tada! – OMGtechy

+5

_ "mon professeur nous a demandé de ne pas utiliser de ficelles et de vecteurs" _ - Vous devriez demander un remboursement. –

+0

@CaptainObvlious peut-être simplement pour les amener à penser à ce qui se passe sous le capot et mettre en œuvre de tels outils eux-mêmes pour l'apprentissage. Bien que j'admette que cela semble étrange dans cet exemple. – OMGtechy

Répondre

2

mon professeur nous a demandé de ne pas utiliser des chaînes et des vecteurs donc j'utilisé des tableaux

S'il n'y a aucune restriction, alors j'utiliser std::map.

Avec restriction, je voudrais utiliser binaire Recherche Arbre avec la structure clé suivante

struct BstNode { 
    int  key_;  // 'int' or some other appropriate 
    int  value_; // - do - 
    BstNode * left_; 
    BstNode * right_; 
}; 
0

Comme l'a dit @Arun, utilisez un binaire arbre de recherche pour le dictionnaire.

Le résultat d'une union est tout à partir des deux dictionnaires.

La méthode la plus simple consiste à traverse l'autre dictionnaire, au noeud par noeud, en insérant les paires de l'autre dans le dictionnaire ce dictionnaire. Mettez à jour votre méthode insert pour ne pas autoriser les doublons.

1

Comme indiqué précédemment, une carte serait la meilleure avenue étant donné que votre enseignant demande des paires valeur/clé. Étant donné que les spécifications stipulent que vous n'êtes pas autorisé à utiliser les bibliothèques intégrées, une simple recherche Google pour how maps are implemented in c++ a renvoyé un lien vers un fichier PDF "Implementing Maps".

Étant donné qu'une carte contient des valeurs de clé uniques, elle est définie comme Set mathématiquement. Regarder comment un syndicat fonctionne dans un ensemble devrait aider.

Lorsqu'il s'agit de surcharger operator+, une autre recherche Google a donné "9.2 — Overloading the arithmetic operators".

Bienvenue dans la partie science de l'informatique!

Questions connexes