Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
DiffAux.h
Go to the documentation of this file.
1
6#pragma once
7
8#include <ext/algorithm>
9
10#include <alib/set>
11#include <alib/list>
12#include <alib/map>
13#include <alib/multimap>
14#include <alib/vector>
15
16namespace compare {
17
18class DiffAux {
19public:
20 template < class T >
21 static void setDiff ( ext::ostream & out, const ext::set < T > & a, const ext::set < T > & b );
22 template < class T >
23 static void vectorDiff ( ext::ostream & out, const ext::vector < T > & a, const ext::vector < T > & b );
24 template < class T >
25 static void listDiff ( ext::ostream & out, const ext::list < T > & a, const ext::list < T > & b );
26 template < class T, class R >
27 static void mapDiff ( ext::ostream & out, const ext::map < T, R > & a, const ext::map < T, R > & b );
28 template < class T, class R >
29 static void mapDiff ( ext::ostream & out, const ext::multimap < T, R > & a, const ext::multimap < T, R > & b );
30};
31
32template <class T>
33void DiffAux::setDiff(ext::ostream & out, const ext::set<T> &a, const ext::set<T> &b) {
34 ext::set<T> aMinusB;
35 std::set_difference(a.begin(), a.end(), b.begin(), b.end(), std::inserter(aMinusB, aMinusB.begin()));
36
37 ext::set<T> bMinusA;
38 std::set_difference(b.begin(), b.end(), a.begin(), a.end(), std::inserter(bMinusA, bMinusA.begin()));
39
40 for(typename ext::set<T>::const_iterator iter = aMinusB.begin(); iter != aMinusB.end(); iter++)
41 out << "< " << *iter << std::endl;
42
43 out << "---" << std::endl;
44
45 for(typename ext::set<T>::const_iterator iter = bMinusA.begin(); iter != bMinusA.end(); iter++)
46 out << "> " << *iter << std::endl;
47}
48
49template < class T >
51 ext::vector < T > aMinusB;
52 std::set_difference ( a.begin ( ), a.end ( ), b.begin ( ), b.end ( ), std::inserter ( aMinusB, aMinusB.begin ( ) ) );
53
54 ext::vector < T > bMinusA;
55 std::set_difference ( b.begin ( ), b.end ( ), a.begin ( ), a.end ( ), std::inserter ( bMinusA, bMinusA.begin ( ) ) );
56
57 for ( typename ext::vector < T >::const_iterator iter = aMinusB.begin ( ); iter != aMinusB.end ( ); iter++ )
58 out << "< " << * iter << std::endl;
59
60 out << "---" << std::endl;
61
62 for ( typename ext::vector < T >::const_iterator iter = bMinusA.begin ( ); iter != bMinusA.end ( ); iter++ )
63 out << "> " << * iter << std::endl;
64}
65
66template <class T>
68 ext::list<T> aMinusB;
69 std::set_difference(a.begin(), a.end(), b.begin(), b.end(), std::inserter(aMinusB, aMinusB.begin()));
70
71 ext::list<T> bMinusA;
72 std::set_difference(b.begin(), b.end(), a.begin(), a.end(), std::inserter(bMinusA, bMinusA.begin()));
73
74 for(typename ext::list<T>::const_iterator iter = aMinusB.begin(); iter != aMinusB.end(); iter++)
75 out << "< " << *iter << std::endl;
76
77 out << "---" << std::endl;
78
79 for(typename ext::list<T>::const_iterator iter = bMinusA.begin(); iter != bMinusA.end(); iter++)
80 out << "> " << *iter << std::endl;
81}
82
83template <class T, class R>
85 ext::map<T, R> aMinusB;
86 std::set_difference(a.begin(), a.end(), b.begin(), b.end(), std::inserter(aMinusB, aMinusB.begin()));
87
88 ext::map<T, R> bMinusA;
89 std::set_difference(b.begin(), b.end(), a.begin(), a.end(), std::inserter(bMinusA, bMinusA.begin()));
90
91 for(typename ext::map<T, R>::const_iterator iter = aMinusB.begin(); iter != aMinusB.end(); iter++)
92 out << "< " << iter->first << ", " << iter->second << std::endl;
93
94 out << "---" << std::endl;
95
96 for(typename ext::map<T, R>::const_iterator iter = bMinusA.begin(); iter != bMinusA.end(); iter++)
97 out << "> " << iter->first << ", " << iter->second << std::endl;
98}
99
100template <class T, class R>
102 ext::map<T, R> aMinusB;
103 std::set_difference(a.begin(), a.end(), b.begin(), b.end(), std::inserter(aMinusB, aMinusB.begin()));
104
105 ext::map<T, R> bMinusA;
106 std::set_difference(b.begin(), b.end(), a.begin(), a.end(), std::inserter(bMinusA, bMinusA.begin()));
107
108 for(typename ext::map<T, R>::const_iterator iter = aMinusB.begin(); iter != aMinusB.end(); iter++)
109 out << "< " << iter->first << ", " << iter->second << std::endl;
110
111 out << "---" << std::endl;
112
113 for(typename ext::map<T, R>::const_iterator iter = bMinusA.begin(); iter != bMinusA.end(); iter++)
114 out << "> " << iter->first << ", " << iter->second << std::endl;
115}
116
117} /* namespace compare */
118
Definition: DiffAux.h:18
static void setDiff(ext::ostream &out, const ext::set< T > &a, const ext::set< T > &b)
Definition: DiffAux.h:33
static void listDiff(ext::ostream &out, const ext::list< T > &a, const ext::list< T > &b)
Definition: DiffAux.h:67
static void vectorDiff(ext::ostream &out, const ext::vector< T > &a, const ext::vector< T > &b)
Definition: DiffAux.h:50
static void mapDiff(ext::ostream &out, const ext::map< T, R > &a, const ext::map< T, R > &b)
Definition: DiffAux.h:84
Class extending the list class from the standard library. Original reason is to allow printing of the...
Definition: list.hpp:44
auto begin() &
Inherited behavior of begin for non-const instance.
Definition: list.hpp:100
auto end() &
Inherited behavior of end for non-const instance.
Definition: list.hpp:130
Class extending the map class from the standard library. Original reason is to allow printing of the ...
Definition: map.hpp:48
auto begin() &
Inherited behavior of begin for non-const instance.
Definition: map.hpp:185
auto end() &
Inherited behavior of end for non-const instance.
Definition: map.hpp:215
Class extending the multimap class from the standard library. Original reason is to allow printing of...
Definition: multimap.hpp:48
auto begin() &
Inherited behavior of begin for non-const instance.
Definition: multimap.hpp:167
auto end() &
Inherited behavior of end for non-const instance.
Definition: multimap.hpp:197
Definition: ostream.h:14
Definition: set.hpp:44
auto begin() &
Inherited behavior of begin for non-const instance.
Definition: set.hpp:99
auto end() &
Inherited behavior of end for non-const instance.
Definition: set.hpp:129
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
auto begin() &
Inherited behavior of begin for non-const instance.
Definition: vector.hpp:125
typename std::vector< T, Alloc >::const_iterator const_iterator
The type of constant values iterator.
Definition: vector.hpp:67
auto end() &
Inherited behavior of end for non-const instance.
Definition: vector.hpp:155
Definition: AutomatonCompare.h:29