Table of Contents

TD3 - Partie 2 - Les classes génériques

Sujet complet

Question n°1

Nous considérons désormais une classe key_value_pair qui stocke une paire de deux éléments, l'un correspondant à une clé et l'autre correspondant à la valeur associée à cette clé :

#include<string>
 
class key_value_pair
{
private:
    int m_key;
    std::string m_value;
 
public:
    key_value_pair(int theKey, std::string theValue): 
        m_key(theKey), m_value(theValue) {}
 
    int getKey() const { return m_key; }
    std::string getValue() const { return m_value; }
 
    void setKey(int theKey) { m_key = theKey; }
    void setValue(std::string theValue) { m_value = theValue; }   
};

Cette classe n'est définie que pour des clés ayant pour type int et des valeurs pour type ''std::string''. Est-il possible d'étendre le type de cette classe pour pouvoir être utilisé pour des clés ayant un type arbitraire keyT et des valeurs ayant un type arbitraire valueT.

Procéder aux modifications de code.

Question n°2

Ecrivez une fonction qui recherche dans un vecteur ''std::vector'' la valeur maximale ainsi que sa position et qui possède l'en-tête suivante:

template<class T> 
key_value_pair<int, T> find_max(std::vector<T> theVector)
{
...
}

Tester cette fonction sur le vecteur suivant :

int main()
{
    std::vector<int> vec = { 1, 8, 3, 2, 4 };
    key_value_pair<int, int> max = find_max(vec);    
 
    std::cout << "Position: " << max.getKey() << ", Value: " << max.getValue() << "\n";
}

Code présenté pendant le cours

''part2.cpp'' Fichier principal contient les fonctions de test et le main.

''key_value_pair.h'' Définition de la classe générique.

Liens vers les éléments syntaxiques et ressources externes

La classe ''std::vector<>''

Les classes génériques en C++

Première partie Troisième partie