-
Notifications
You must be signed in to change notification settings - Fork 0
/
VocabolarioId.hpp
138 lines (127 loc) · 4.14 KB
/
VocabolarioId.hpp
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#ifndef VOCABOLARIOID_HPP_INCLUDED
#define VOCABOLARIOID_HPP_INCLUDED
#include <string>
#include<vector>
#include<algorithm>
using namespace std;
template<class T>
class VocabolarioId
{
///struttura di un vocabolo con costruttore
struct _vocabolo{
T _id;
string _testo;
_vocabolo(const T& id, const string& testo)
{
_id=id;
_testo=testo;
}
};
///struttura che serve per ricercare un vocabolo all'interno del vocabolario dando in ingresso un id o una stringa
struct f_vocabolo{
T f_id;
string f_testo;
bool f_ricerca_id_testo;
f_vocabolo(const T& id) : f_id(id)
{
f_ricerca_id_testo=0;
}
f_vocabolo(const string& testo, const bool& diverso_da_template) : f_testo(testo)
{
f_ricerca_id_testo=1;
}
bool operator () ( const _vocabolo& f_vocabolo ) const
{
return ((!f_ricerca_id_testo&&f_vocabolo._id==f_id)||(f_ricerca_id_testo&&f_vocabolo._testo==f_testo));
}
};
public:
VocabolarioId();
virtual ~VocabolarioId();
VocabolarioId(const VocabolarioId& to_copy);
///immette un nuovo elemento all'interno della struttura dati
void setNuovoElemento(const T& id,const string& testo);
///ricerca il vocabolo tramite il suo id e restituisce la stringa correlata
const string getStringaDaId(const T& id);
///ricerca il vocabolo tramite la sua stringa e restituisce l'id correlato
const T getIdDaStriga(const string& testo);
///riempie un vettore con tutti gli id che sono all'interno del vocabolario
vector<T> getTuttiGliId();
///esegue il controllo sintattico sulla struttura trovando eventuali ripetizioni di id o di stringhe
const bool controlloSintattico();
protected:
private:
vector<_vocabolo> _vocaboli;
};
template<class T>
VocabolarioId<T>::VocabolarioId()
{
}
template<class T>
VocabolarioId<T>::~VocabolarioId()
{
//dtor
}
template<class T>
VocabolarioId<T>::VocabolarioId(const VocabolarioId& to_copy)
{
this->_vocaboli=to_copy._vocaboli;
}
template<class T>
void VocabolarioId<T>::setNuovoElemento(const T& id,const string& testo)
{
_vocaboli.push_back(_vocabolo(id,testo));
}
template<class T>
const string VocabolarioId<T>::getStringaDaId(const T& id)
{
//tramite la struttura di find e il find_if ricerca il vocabolo attraverso il suo id
typename vector<_vocabolo>::iterator it;
it=find_if(_vocaboli.begin(),_vocaboli.end(),f_vocabolo(id));
if(it!=_vocaboli.end())
{
return _vocabolo(*it)._testo;
}else{
return ""; //se non lo trova ritorna uja stringa vuota
}
}
template<class T>
const T VocabolarioId<T>:: getIdDaStriga(const string& testo)
{
//tramite la struttura di find e il find_if ricerca il vocabolo attraverso la sua stringa
typename vector<_vocabolo>::iterator it;
it=find_if(_vocaboli.begin(),_vocaboli.end(),f_vocabolo(testo,0));
if(it!=_vocaboli.end())
{
return _vocabolo(*it)._id;
}else{
return T();//se non lo trova ritorna il valore nullo del tipo template T
}
}
template<class T>
vector<T> VocabolarioId<T>:: getTuttiGliId()
{
vector<T> vettore_di_ritorno;
//inserisce in un vettore tutti gli id dei vocaboli
for(typename vector<_vocabolo>::iterator it=_vocaboli.begin(); it!=_vocaboli.end();it++)
{
vettore_di_ritorno.push_back(_vocabolo(*it)._id);
}
return vettore_di_ritorno;
}
template<class T>
const bool VocabolarioId<T>:: controlloSintattico()
{
//tramite la struttura di find e i find_if controlla che non vi siano stringhe uguali o id uguali
for(typename vector<_vocabolo>::iterator it=_vocaboli.begin();it!=_vocaboli.end();it++)
{
typename vector<_vocabolo>::iterator it_id=find_if(_vocaboli.begin(),it,f_vocabolo(_vocabolo(*it)._id));
typename vector<_vocabolo>::iterator it_testo=find_if(_vocaboli.begin(),it,f_vocabolo(_vocabolo(*it)._testo,0));
if((it_id!=it)||(it_testo!=it))
{
return 1;
}
}
return 0;
}
#endif // VOCABOLARIOID_HPP_INCLUDED