web-dev-qa-db-fra.com

Comment puis-je stocker une paire de chiffres en C ++?

J'essaie d'apprendre C++ et maintenant, j'écris actuellement un programme qui doit générer une liste de paires d'entiers.

Quelle est la meilleure façon de gérer cela? Je n'ai pas la bibliothèque de Boost disponible sur nos ordinateurs de Linux à l'école. Je ne crois donc pas que je puisse utiliser Boost :: Tuple.

Aucune suggestion?

25
Mithrax

Jettes un coup d'oeil à std::pair<object, object>

ÉDITER:

Il est standard C++ et une partie de ce que l'on appelle la STL (bibliothèque de modèles standard). C'est une collection de belles structures de données génériques (c'est-à-dire peut être utilisée pour stocker n'importe quel type d'objet C++). Cette structure particulière est utilisée pour stocker un "tuple" ou une paire de nombres ensemble. C'est fondamentalement un objet avec les membres "Premier" et "deuxième" qui se réfèrent aux premier et deuxième objets (de tout type!) Que vous les stockez.

Donc, déclarez simplement un tableau de pair<int, int>, ou mieux encore, utilisez un autre type stl appelé "Vector" pour créer une liste de taille dynamique de pair<int, int>: vector<pair<int, int> > myList.

Hey qu'est-ce que tu sais! Une liste de paires de taille dynamique existe déjà et elle s'appelle une carte! En utilisant c'est aussi simple que #include <map> et déclarer un map<int, int> myMap !!!

ÉDITER:

Oui, comme indiqué, une carte bien "mappe" un objet à un autre, vous ne pouvez donc pas avoir répété des valeurs lafthant-côté. Si cela fait bon, une carte est ce que vous recherchez, sinon vous tiendrez au vecteur de paire ... ou jetez un coup d'œil sur plusieurs fois.

std::map , std::multimap

31
Mahmoud Al-Qudsi

Utiliser std :: paire?

#include <utility>
#include <iostream>

int main() {
    std::pair <int, int> p = std::make_pair( 1, 2 );
    std::cout << p.first << " " << p.second << std::endl;
}

Vous pouvez faire un vecteur de paires:

typedef std::pair <int, int> IntPair;

...

std::vector <IntPair> pairs;
pairs.Push_back( std::make_pair( 1, 2 ) );
pairs.Push_back( std::make_pair( 3, 4 ) );
19
anon

Tandis que STD :: paire est la meilleure approche à utiliser, je suis surpris que personne ne mentionnait la solution pré-stl:

struct Pair {
    int first;
    int second;
};

Il est inquiet que les gens pensent avoir besoin de renforcer pour un problème aussi trivial.

9
shura