Utilisation des tableaux associatifs

C++:
Utilisation des tableaux associatifs

Comment faire :

En C++, les tableaux associatifs prennent vie avec les en-têtes <map> et <unordered_map>. Voyons des exemples pour observer les deux en action.

Utilisation de std::map

std::map maintient les éléments triés en fonction de la clé. Voici comment vous commencez :

#include <iostream>
#include <map>
#include <string>

int main() {
    std::map<std::string, int> ageMap;
    
    // Insertion de valeurs
    ageMap["Alice"] = 30;
    ageMap["Bob"] = 25;
    
    // Accès aux valeurs
    std::cout << "Âge de Bob : " << ageMap["Bob"] << std::endl;
    
    // Itération sur une map
    for(const auto &pair : ageMap) {
        std::cout << pair.first << " a " << pair.second << " ans." << std::endl;
    }
    
    return 0;
}

Utilisation de std::unordered_map

Quand l’ordre n’a pas d’importance, mais que la performance compte, std::unordered_map est votre allié, offrant une complexité moyenne plus rapide pour les insertions, les recherches et les suppressions.

#include <iostream>
#include <unordered_map>
#include <string>

int main() {
    std::unordered_map<std::string, double> productPrice;
    
    // Insertion de valeurs
    productPrice["milk"] = 2.99;
    productPrice["bread"] = 1.99;
    
    // Accès aux valeurs
    std::cout << "Prix du lait : $" << productPrice["milk"] << std::endl;
    
    // Itération sur un unordered_map
    for(const auto &pair : productPrice) {
        std::cout << pair.first << " coûte $" << pair.second << std::endl;
    }
    
    return 0;
}

Plongée profonde

Les tableaux associatifs en C++, en particulier std::map et std::unordered_map, ne concernent pas seulement le stockage d’éléments. Ils fournissent une base pour une gestion de données plus complexe en permettant des opérations comme la recherche, l’insertion et la suppression dans des complexités temporelles efficaces (logarithmique pour std::map et en temps moyen constant pour std::unordered_map). Cette efficacité provient des structures de données sous-jacentes : un arbre équilibré pour std::map et une table de hachage pour std::unordered_map.

Historiquement, avant qu’ils ne fassent partie de la bibliothèque standard, les programmeurs devaient implémenter leurs propres versions ou utiliser des bibliothèques tierces, conduisant à des incohérences et des inefficacités potentielles. L’inclusion des maps dans la bibliothèque standard du C++ a non seulement standardisé leur utilisation mais aussi optimisé leur performance à travers différents compilateurs et plateformes.

Bien que les deux soient puissants, le choix entre un std::map et un std::unordered_map repose sur les spécificités de votre cas d’utilisation. Besoin de données ordonnées et cela ne vous dérange pas une légère perte de performance ? Optez pour std::map. Si vous recherchez la vitesse et que l’ordre n’a pas d’importance, std::unordered_map est probablement votre meilleur choix.

Cependant, il est important de noter que lorsqu’on travaille avec des structures de données complexes, il y a toujours des compromis. Dans certains cas de niche, d’autres structures de données ou même des bibliothèques tierces pourraient offrir une meilleure performance ou des fonctionnalités adaptées à vos besoins particuliers. Pesez toujours vos options en fonction des exigences de votre projet.