std::set_intersection( rows0.begin(), rows0.end()
,rows1.begin(), rows1.end()
,back_inserter( inter )
,FunctorCmpId() );
Dans 'inter' j'obtiens les =E9l=E9ments communs aux deux vectors par
rapport =E0
Data::id.
Sauf que je souhaiterais que dans inter soit stock=E9 les lignes de
rows0 et rows1.
J'imagine qu'il suffit que j'=E9crive mom propre back_inserter, mais
voil=E0 je
ne trouve pas d'exemple ou d'info sur le sujet.
Questions
Est il possible d'=E9crire sont propre back_inserter pour obtenir ce que
je veux ?
Ou mieux est qu'il existe d=E9j=E0 un algo plus adapt=E9 =E0 mon besoin ?
std::set_intersection( rows0.begin(), rows0.end() ,rows1.begin(), rows1.end() ,back_inserter( inter ) ,FunctorCmpId() );
Dans 'inter' j'obtiens les éléments communs aux deux vectors par rapport à Data::id. Sauf que je souhaiterais que dans inter soit stocké les lignes de rows0 et rows1.
C-à-d les indices dans les vecteurs ? Quelque chose du genre : std::vector<std::pair<size_t, size_t> > inter;
J'imagine qu'il suffit que j'écrive mom propre back_inserter, mais voilà je ne trouve pas d'exemple ou d'info sur le sujet.
Questions Est il possible d'écrire sont propre back_inserter pour obtenir ce que je veux ?
Je ne crois pas. A la fin, l'algorithm va appeler « *iter= », avec un des éléments comparés identiques. Tout au plus, tu as une référence à l'élément dans un des deux vector d'origine. Et encore. En théorie, au moins, tu peux avoir une référence à un temporaire, copie d'un des deux éléments. Tu n'as pas d'itérateur ni d'indice, et tout au plus, en supposant qu'il n'y a pas de copie, tu peux déduire une des indices ; en aucun cas les deux.
Ou mieux est qu'il existe déjà un algo plus adapté à mon besoin ?
Je ne crois pas. Toute la bibliothèque standard est conçue autour de l'idée qu'on peut copier à volenté, et que chaque fois que deux « objets » se comparent égaux, on peut se servir de l'un ou de l'autre, ou d'une copie de l'un ou de l'autre, à volenté. Dès que tes objets associent une clé et des données, et que la comparaison ne prend en compte que la clé, tu sors du modèle. Il te faudrait pratiquement ton propre boucle :
std::set_intersection( rows0.begin(), rows0.end()
,rows1.begin(), rows1.end()
,back_inserter( inter )
,FunctorCmpId() );
Dans 'inter' j'obtiens les éléments communs aux deux vectors
par rapport à Data::id.
Sauf que je souhaiterais que dans inter soit stocké les lignes de
rows0 et rows1.
C-à-d les indices dans les vecteurs ? Quelque chose du genre :
std::vector<std::pair<size_t, size_t> > inter;
J'imagine qu'il suffit que j'écrive mom propre back_inserter,
mais voilà je ne trouve pas d'exemple ou d'info sur le sujet.
Questions
Est il possible d'écrire sont propre back_inserter pour
obtenir ce que je veux ?
Je ne crois pas. A la fin, l'algorithm va appeler « *iter= »,
avec un des éléments comparés identiques. Tout au plus, tu as
une référence à l'élément dans un des deux vector d'origine. Et
encore. En théorie, au moins, tu peux avoir une référence à un
temporaire, copie d'un des deux éléments. Tu n'as pas
d'itérateur ni d'indice, et tout au plus, en supposant qu'il n'y
a pas de copie, tu peux déduire une des indices ; en aucun cas
les deux.
Ou mieux est qu'il existe déjà un algo plus adapté à mon
besoin ?
Je ne crois pas. Toute la bibliothèque standard est conçue
autour de l'idée qu'on peut copier à volenté, et que chaque fois
que deux « objets » se comparent égaux, on peut se servir de
l'un ou de l'autre, ou d'une copie de l'un ou de l'autre, à
volenté. Dès que tes objets associent une clé et des données, et
que la comparaison ne prend en compte que la clé, tu sors du
modèle. Il te faudrait pratiquement ton propre boucle :
std::set_intersection( rows0.begin(), rows0.end() ,rows1.begin(), rows1.end() ,back_inserter( inter ) ,FunctorCmpId() );
Dans 'inter' j'obtiens les éléments communs aux deux vectors par rapport à Data::id. Sauf que je souhaiterais que dans inter soit stocké les lignes de rows0 et rows1.
C-à-d les indices dans les vecteurs ? Quelque chose du genre : std::vector<std::pair<size_t, size_t> > inter;
J'imagine qu'il suffit que j'écrive mom propre back_inserter, mais voilà je ne trouve pas d'exemple ou d'info sur le sujet.
Questions Est il possible d'écrire sont propre back_inserter pour obtenir ce que je veux ?
Je ne crois pas. A la fin, l'algorithm va appeler « *iter= », avec un des éléments comparés identiques. Tout au plus, tu as une référence à l'élément dans un des deux vector d'origine. Et encore. En théorie, au moins, tu peux avoir une référence à un temporaire, copie d'un des deux éléments. Tu n'as pas d'itérateur ni d'indice, et tout au plus, en supposant qu'il n'y a pas de copie, tu peux déduire une des indices ; en aucun cas les deux.
Ou mieux est qu'il existe déjà un algo plus adapté à mon besoin ?
Je ne crois pas. Toute la bibliothèque standard est conçue autour de l'idée qu'on peut copier à volenté, et que chaque fois que deux « objets » se comparent égaux, on peut se servir de l'un ou de l'autre, ou d'une copie de l'un ou de l'autre, à volenté. Dès que tes objets associent une clé et des données, et que la comparaison ne prend en compte que la clé, tu sors du modèle. Il te faudrait pratiquement ton propre boucle :