Newsgroup: it.comp.lang.c++
Titolo: intersezione tra set

Ciao,
qualcuno mi puo' fare un esempio di intersezione tra set? Tutti gli
esempi che ho trovato visualizzano direttamente l'intersezione. Io
invece vorrei memorizzare l'intersezione in un altro set. Cioe':
set<int> s1, s2, s3;
...
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), ???);
cosa devo mettere al posto dei ??? per avere in s3 l'intersezione di s1
e s2
Grazie in anticipo,
Giulio


Ad esempio std::inserter(s3, s3.begin()) , dopo aver incluso
<iterator>.
Ciao,
Nicola

Grazie tante. E se invece avessi un set di strutture tipo:
struct TAnnotation {
  int x, y;
};
struct TAnnotationLT
{
  bool operator()(const TAnnotation& a1, const TAnnotation& a2) const {
    return ( (a1.x < a2.x) ||
	     ( (a1.x == a2.x) && (a2.y < a2.y) ) );
  }
};
typedef set<TAnnotation, TAnnotationLT> TAnnotationsSet;
TAnnotationsSet s1, s2, s3;
e volessi in s3 l'intersezione tra s1 ed s2?
Grazie in anticipo,
Giulio

 e volessi in s3 l'intersezione tra s1 ed s2?
set_intersection(
    s1.begin(),s1.end(),
    s2.begin(),s2.end(),
    std::inserter(s3,s3.begin()),TAnnotationLT()
);
ma prima togli gli errori che ti hanno fatto notare negli altri post.
Tommaso
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:1127217758.3...@o13g2000cwo.googlegroups.com...

#include <algorithm>
#include <iterator>
int main()
{
    std::set s1,s2,s3;
    std::set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(),
std::inserter(s3,s3.begin()));
}
Ciao,
Gianluca

Giulio Veronesi ha scritto:

#include <set>
#include <iostream>
#include <iterator>
#include <algorithm>
void print( std::set<int>* s ) {
        using namespace std;
        copy(s->begin(), s->end(),
                        ostream_iterator<int>
                        (cout, " "));
        cout << endl;
}
int main( int argc, char* argv ) {
        using namespace std;
        int A1[] = {1,3,4,6,7,9};
        int A2[] = {3,5,7,10};
        set<int>* a = new set<int>( A1, A1+6 );
        set<int>* b = new set<int>( A2, A2+4 );
        set<int>* res = new set<int>();
        cout << " a : ";
        print(a);
        cout << " b : ";
        print(b);
        cout << " res : ";
        print(res);
        set_intersection( a->begin(), a->end(),
                          b->begin(), b->end(),
                          insert_iterator<set<int> >(*res,
res->begin()) 			);
        cout << " After intersection : ";
        print(res);
        delete a, b, res;
        return 0;
}
Questo è quello che arriva dopo l'abbiocco post-pranzo.
;-) Ciao,
-- 
Matteo Settenvini
FSF Associated Member
Email : 
mat...@member.fsf.org
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d--(-) s+:- a-- C++ UL+++
P?>++ L+++>$ E+>+++ W+++ N++ o?
w--- O- M++ PS++ PE- Y+>++
PGP+++ t+ 5 X- R tv-- b+++ DI+
D++ G++ e h+ r-- y?
------END GEEK CODE BLOCK------

> Giulio Veronesi ha scritto:


uh, una precisazione: ho sbagliato a scrivere:
delete a,b,res;
ovviamente; bisogna scrivere:
delete a; delete b; delete res;
pena memory leak.
Pardon.


 pena memory leak.
certo. ma poi perche' usare new e puntatori in questo semplice caso?
non era piu' semplice:
set<int> a( A1, A1+6 );
set<int> b( A2, A2+4 );
set<int> res;
?
Vieni da Java?
