Comment puis-je stocker une paire de nombres en C++?
Je suis en train d'apprendre le C++ et maintenant je suis en train d'écrire un programme qui affiche une liste de paires d'entiers.
Quelle est la meilleure façon de gérer cela? Je n'ai pas la bibliothèque boost disponible sur nos ordinateurs linux à l'école, donc je ne crois pas que je peux utiliser boost::tuple.
Des suggestions?
- Si vous avez suffisamment récente version de g++ qui a tr1 soutien,
boost::tuple
est inclus en tant questd::tr1::tuple
; comme d'autres le remarque dans les réponses ci-dessous, cependant, vous pouvez simplement utiliserstd::pair
pour les paires.
Vous devez vous connecter pour publier un commentaire.
Ont un coup d'oeil à
std::pair<object, object>
EDIT:
C'est la norme C++ et une partie de ce qui est connu comme la STL (Standard Template Library). C'est une collection de nice structures de données génériques (c'est à dire peut être utilisé pour stocker tous C++ type d'objet). Cette structure particulière est utilisée pour stocker un "tuple" ou une paire de nombres. En gros, c'est un objet avec des membres de la "première" et "seconde", qui se réfèrent à la première et deuxième objets (de tout type!) que vous stockez dans leur.
Donc, il suffit de déclarer un tableau de
pair<int, int>
, ou mieux encore, utilisez un autre STL type appelé le "vecteur" pour faire dynamiquement la taille de la liste depair<int, int>
:vector<pair<int, int> > myList
.Hé, que faites-vous connaître! Dynamique de la taille d'une liste de paires existe déjà et ça s'appelle une carte! Son utilisation est aussi simple que
#include <map>
et de déclarer unemap<int, int> myMap
!!!EDIT:
Oui, comme l'a souligné, une carte bien des "cartes" d'un objet à un autre, de sorte que vous ne pouvez pas avoir répété gauche des valeurs. Si c'est bien, puis une carte est ce que vous cherchez, sinon bâton pour le vecteur de la paire.... ou de prendre un coup d'oeil à multimaps.
std::map
,std::multimap
cout
(comme il l'est pourint
oudouble
) -- vous avez à gérer séparément.vector<pair<int, int> >
(avis de l'espace à la fin!) parce que>>
analyse comme "maj droite". Cela sera corrigé dans C++0x.std::map
nistd::multimap
sont "d'une liste de paires". Les listes de conserver leur commande, la carte des collections ne pas.Utiliser std::pair?
Vous pouvez faire un vecteur de paires:
C++11
, la création de vecteur de paires est vraiment facile:std::vector<std::pair<int, int>> pairs = {{1,2}, {3,4}, {5,6}};
Alors que std::pair est la meilleure approche à utiliser, je suis surpris que personne n'a mentionné pré-stl solution:
Il est inquiétant de constater que les gens pensent qu'ils ont besoin de boost pour un banal problème.
std::pair
n'a même pas servir à des fins d'illustration. En fait, quel est le but de parler de cette méthode à tous?pair
a rien à voir avec le coup de pouce? Je fais référence à ceci:It is worrying that people think that they need boost for such a trivial problem.
STL != Coup de pouce?