====== TD3 - Partie 2 - Les classes génériques ======
[[..:td_3|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
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 [[https://en.cppreference.com/w/cpp/string/basic_string|''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 [[https://en.cppreference.com/w/cpp/container/vector|''std::vector'']] la valeur maximale ainsi que sa position et qui possède l'en-tête suivante:
template
key_value_pair find_max(std::vector theVector)
{
...
}
Tester cette fonction sur le vecteur suivant :
int main()
{
std::vector vec = { 1, 8, 3, 2, 4 };
key_value_pair max = find_max(vec);
std::cout << "Position: " << max.getKey() << ", Value: " << max.getValue() << "\n";
}
==== Code présenté pendant le cours ====
{{https://perso.ensta-paris.fr/~bmonsuez/Media/code/in202/2021/td3/part2/part2.cpp|''part2.cpp''}} Fichier principal contient les fonctions de test et le main.
{{https://perso.ensta-paris.fr/~bmonsuez/Media/code/in202/2021/td3/part2/key_value_pair.h|''key_value_pair.h''}} Définition de la classe générique.
===== Liens vers les éléments syntaxiques et ressources externes =====
[[https://en.cppreference.com/w/cpp/container/vector|La classe ''std::vector<>'']]
[[cpp:syntax:class:generic|Les classes génériques en C++]]
===== Navigation =====
[[.:part_i|Première partie]]
[[.:part_iii|Troisième partie]]