1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
#include <iostream>
#include <set>
using namespace std;
struct Data
{
int id;
int qt;
Data(int id, int qt):
id(id), qt(qt) {}
bool operator<(const Data & d) const { return id<d.id; }
};
void msg(const char * str, int n) { cout << str << " - " << n << endl; }
void DoIt(const set<Data> & s1, const set<Data> & s2)
{
set<Data>::const_iterator it1=s1.begin(), end1=s1.end(), it2=s2.begin(), end2=s2.end();
while (true)
{
if (it1==end1) { while (it2!=end2) { msg("new", it2->id); it2++; } break; }
if (it2==end2) { while (it1!=end1) { msg("cancel", it1->id); it1++; } break; }
if (*it2<*it1) { msg("new", it2->id); it2++; } else
if (*it1<*it2) { msg("cancel", it1->id); it1++; } else
if (it1->qt!=it2->qt) { msg("update", it1->id); it1++; it2++; }
else { msg("do not update", it1->id); it1++; it2++; }
}
}
int main()
{
set<Data> set1, set2;
set1.insert(Data(2,10));
set1.insert(Data(5,15));
set1.insert(Data(6,120));
set1.insert(Data(8,150));
set1.insert(Data(10,40));
set2.insert(Data(1,20));
set2.insert(Data(4,35));
set2.insert(Data(6,120));
set2.insert(Data(8,200));
set2.insert(Data(11,70));
DoIt(set1, set2);
//cin.get();
return 0;
}
|