10
votes

Objet de fonction C ++ pour renvoyer `p-> premier` et` p-> second`

Y a-t-il un objet de fonction intégré qui renvoie p-> premier et p-> second , afin que je puisse heureusement écrire xxx p> STR STL-Solution est le meilleur, SOWOST BOOST est le deuxième meilleur.

ouais, je sais boost :: lambda , je ne sais pas vouloir commencer à l'utiliser.


3 commentaires

Il semble que vous ayez compris qu'aucun support direct n'existe dans la STL (ou sans vraisemblablement booster), pourquoi ne pas écrire un modèle de fonction simple pour le faire pour vous? Il doit être plus clair que l'approche ou l'approche non standard ...


@Nim, c'est probablement une bonne idée, mais j'ai toujours peur que tout le monde de l'équipe propose sa propre version de Littletidbitmissingfromspec , donc si je pouvais trouver quelque chose de solide sur boost, ce serait meilleur.


Un espace de noms Utils (ou AUX) bien documentés est ce dont vous avez besoin! ;)


3 Réponses :


9
votes

Il existe des extensions non standard à g ++ et SGI appelé < Code> SELECT1ST et SELECT2ND . Donc, il n'y a probablement rien dans la STL pour cela.

La liaison de Boost peut également le faire, donnez-lui un pointeur à la fonction de membre correcte xxx


0 commentaires

2
votes

Si vous pouvez utiliser C ++ 0x, vous pouvez utiliser de vrais lambdas depuis G ++ 4.5 ou vous pouvez utiliser la nouvelle tipple-bibliothèque qui est entièrement compatible avec STD :: paires. Ensuite, vous pourriez utiliser STD :: Get <0> pour la première et STD :: Get <1> pour la seconde.

Si vous êtes lié à C ++ 98, vous pouvez utiliser std :: TR1 :: tuple au lieu de STD :: paire, comme dans TR1 Get ne fonctionne pas avec STD :: paire.

Aussi, vous pouvez utiliser Lier de TR1 (TR1 / FONCTIONNEL) comme ELAZAR.


0 commentaires

4
votes

Nous pouvons facilement écrire un SELECT1ST et SELECT2ND:

transform(m.begin(),m.end(),back_inserter(keys), select1st());
transform(m.begin(),m.end(),back_inserter(vals), select2nd());


0 commentaires