Manipulation des paires
Accès et modification des éléments de paire
La manipulation des paires implique diverses techniques pour travailler avec les éléments de paire de manière efficace et sûre.
1. Accès aux éléments
#include <utility>
#include <iostream>
int main() {
std::pair<int, std::string> pair1(42, "LabEx");
// Accès aux éléments
int first_value = pair1.first;
std::string second_value = pair1.second;
// Modification des éléments
pair1.first = 100;
pair1.second = "Programming";
return 0;
}
2. Opérations de comparaison de paires
#include <utility>
#include <iostream>
int main() {
std::pair<int, std::string> pair1(42, "LabEx");
std::pair<int, std::string> pair2(42, "LabEx");
std::pair<int, std::string> pair3(100, "Programming");
// Opérateurs de comparaison
bool equal = (pair1 == pair2); // true
bool not_equal = (pair1 != pair3); // true
bool less_than = (pair1 < pair3); // true
return 0;
}
Méthodes de manipulation de paires
Méthode |
Description |
Exemple |
swap() |
Échanger les éléments de la paire |
pair1.swap(pair2) |
tie() |
Décomposer les éléments de la paire |
std::tie(x, y) = pair1 |
make_pair() |
Créer une nouvelle paire |
auto new_pair = std::make_pair(x, y) |
Flux de travail de manipulation de paires
graph TD
A[Manipulation de paires] --> B{Type d'opération}
B --> |Accès| C[membres first/second]
B --> |Modification| D[affectation directe]
B --> |Comparaison| E[opérateurs de comparaison]
B --> |Avancé| F[tie(), swap()]
Techniques de manipulation avancées
#include <utility>
#include <tuple>
#include <iostream>
int main() {
// Utilisation de std::tie pour la décomposition
int x;
std::string y;
std::pair<int, std::string> pair1(42, "LabEx");
std::tie(x, y) = pair1;
// Liaisons structurées (C++17)
auto [value, text] = pair1;
// Échange de paires
std::pair<int, std::string> pair2(100, "Programming");
pair1.swap(pair2);
return 0;
}
#include <utility>
#include <algorithm>
#include <vector>
int main() {
std::vector<std::pair<int, std::string>> pairs = {
{1, "LabEx"},
{3, "Programming"},
{2, "C++"}
};
// Tri des paires
std::sort(pairs.begin(), pairs.end());
// Transformation des paires
std::transform(pairs.begin(), pairs.end(), pairs.begin(),
[](const auto& p) {
return std::make_pair(p.first * 2, p.second + " Avancé");
});
return 0;
}
Meilleures pratiques
- Utilisez les liaisons structurées pour un code plus clair
- Préférez
std::tie()
pour les affectations multiples
- Soyez prudent avec les paires basées sur des pointeurs
- Considérez la sémantique de déplacement pour les performances
Gestion des erreurs lors de la manipulation de paires
#include <utility>
#include <stdexcept>
void validate_pair(const std::pair<int, std::string>& pair) {
if (pair.first < 0) {
throw std::invalid_argument("Valeur négative non autorisée");
}
}