Map
Les map en C++ sont des conteneurs associatifs de la STL. Ils permettent d’associer une clé et une valeur.
Il existe une unordered_map lorsque l’ordre de stockage des données n’est pas important. On utilise une map lorsque l’on souhaite que les données restent dans l’ordre.
Cela a un impact notamment lorsqu’on itère sur la map. L’unordered_map ne garantissant pas l’ordre des éléments.
Exemple
Association de chaînes
std::unordered_map<std::string, std::string> numbers;
numbers["zéro"] = "zero";
numbers["un"] = "one";
numbers["deux"] = "two";
numbers["trois"] = "three";
std::cout << numbers["zéro"] << std::endl;
std::cout << numbers["trois"] << std::endl;
Sortie :
zero
three
Association chaînes et fonctions
#include <functional> // for std::function
#include <iostream> // for std::cout and cerr
#include <string>
#include <unordered_map>
#include <vector>
int list_files(const std::vector<std::string> &args);
void cat_one_file(const std::string &file_name);
int cat_files(const std::vector<std::string> &args);
static int true_builtin(const std::vector<std::string> &args)
{
return 0;
}
static int false_builtin(const std::vector<std::string> &args)
{
return 1;
}
std::unordered_map<std::string,
std::function<int(const std::vector<std::string> &)>>
built_ins{{std::string("ls"), list_files},
{std::string("cat"), cat_files},
{std::string("true"), true_builtin},
{std::string("false"), false_builtin}};
int main(int ac, char **av)
{
std::vector<std::string> args;
int idx{2};
if (ac < 2)
return (1);
while (idx < ac) {
args.push_back(av[idx]);
idx += 1;
}
return built_ins[av[1]](args);
}
Utilisation, avec sorties tronquées.
$ ./a.out ls
main.cpp
[...]
$ ./a.out cat main.cpp
#include <exception> // for system_error
#include <iostream> // for std::cout and cerr
[...]