10
votes

Comment créer une liste de tuples C ++

Je suis assez nouveau à C ++, je n'ai pas vraiment de fond. Je lie à créer une liste de tuples, le premier sera un int, la seconde sera une chaîne.

  #include <string>
  #include <list>
  #include <boost/tuple/tuple.hpp>
  ....
  list< tuple<int,string> > time;


4 commentaires

Dumb Question: Vous êtes-vous souvenu d'ajouter à l'aide de l'espace de noms Std / à l'aide de l'espace de noms d'espace de noms? Quels sont les messages d'erreur spécifiques que vous obtenez?


Avez-vous une "utilisation d'un espace de noms"; Dans votre code? Je suppose que vous avez besoin d'une "utilisation d'espaces de noms"; également.


Je pense que vous pouvez utiliser std :: map à cette fin. Il tiendra des paires int-chaîne , triées automatiquement par int valeurs. ici est la description.


Vous étiez correct, il manquait à l'aide de l'espace de noms. Haha, je dois me procéder à ça, merci!


4 Réponses :


0
votes

juste comme une note latérale:

La nouvelle norme C ++ introduit des modèles variadiques et avec cela également. GCC et Visual Studio (au moins) les apportent. Donc, si vous êtes possible pour vous (c'est-à-dire si tous les compilateurs pris en charge sont déjà très probablement très probables), vous pouvez l'utiliser. P>

Le seul problème est que certains compilateurs ont toujours du tuple dans le STD :: TR1 Espace de noms et autres l'ont déjà dans l'espace de noms STD. Aussi parfois, vous devez inclure et parfois. Mais vous pouvez configurer votre système de construction pour définir des macros qui vous permettent de prendre en charge plusieurs régimes. Si vous, par exemple seulement besoin de prendre en charge Visual Studio 10 et / ou une version assez nouvelle GCC, vous pouvez effectuer les éléments suivants: p> xxx pré>

par exemple avec cmake que vous pourriez générer un en-tête. Fichier, qui vous apporte de la prise en charge de tous les compilateurs, qui supporte des tuples (et avec un peu plus de travail, même d'utiliser un coup de pouce à utiliser comme une chute). P>

Pour ce faire, vous créeriez quelque chose comme un tuple.h.cmake Fichier: P>

#include <string>
#include <list>
#include "tuple.h"

std::list<TR1_NS::tuple<int, std::string> > time;


0 commentaires

14
votes

Pour une liste simple Utilisez std :: vecteur au lieu de std :: Liste .

Vous voulez probablement quelque chose de simple comme: < Pré> xxx

std :: liste est en réalité une implémentation d'une liste doublement liée que vous n'avez peut-être pas besoin.


1 commentaires

Y a-t-il un moyen facile de le trier dans ce cas par âge? Dois-je écrire ma propre fonction de tri?



1
votes

Pourrait ne pas être pertinent ici, mais si la "partie de création" contient remplir la liste avec des éléments, boost.Assign pourrait être utile. Vous pouvez faire quelque chose comme ceci:

#include <boost/assign/list_of.hpp>
#include <vector>

int main()
{
    typedef boost::tuple<int, std::string> tuple;

    std::vector<tuple> v = boost::assign::tuple_list_of(1, "foo")(2, "bar");
}


0 commentaires

12
votes

Les réponses ici sont un peu dépassées, et ne vous disent pas comment trier la liste.

Depuis C ++ 11 vous pouvez utiliser la norme code tuple code> , avec un vecteur code> par exemple: p>

get<int>(data[i])


0 commentaires