Я пытаюсь добавить Tuple
, который наследуется от vector<string>
к набору. (Я читал, что это плохая практика, но мой профессор сказал нам об этом и сказал, что для этого задания он хочет, чтобы мы унаследовали от vector<string>
в любом случае) У меня есть карта, которая содержит строку в качестве ключа и Relation
в качестве значения. Relation
- это класс, который мы строим для этого задания. В Relation
есть set<Tuple>
, где Tuple
- это, по существу, vector<string>
. Моя проблема в том, что когда я пытаюсь добавить Tuple
к экземпляру Relation
, я не могу этого сделать.
При первой попытке добавить к набору размер набора изменяется с 0 на 1 (успешная вставка), но при каждой попытке после первой размер остается равным 1 (неудачная попытка).
Я включил область кода, в которой я сузил проблему, и включил все, что, как я считаю, должно быть, но это был долгий день, так что прости, если я что-то пропустил.
//Interpreter file
Database dataBase;
void Interpreter::createDatabase(){
for(unsigned int z = 0; z < dp.getFacts().size(); z++){
string relName = dp.getFacts()[z].getName();
vector<string> tup;
for(unsigned int i = 0; i < dp.getFacts()[z].getParams().size(); i++){
tup.push_back(dp.getFacts()[z].getParams()[i].getName());
}
dataBase.addTuple(relName,tup);
}
}
//in the Database.cpp file
map<string,Relation> db;
void Database::addTuple(string name, vector<string> tuple){
Relation temp = db.at(name);
temp.addTuple(tuple);
db.at(name) = temp;
}
// in the Relation.cpp File
set<Tuple> tuples;
void Relation::addTuple(vector<string> tuple){
Tuple t = Tuple(tuple);
tuples.insert(t);
}
// Tuple Class
vector<string> values;
Tuple::Tuple(){}
Tuple::Tuple(vector<string> val){
values = val;
}
Tuple::~Tuple(){}
string Tuple::toString(){
string str = "";
for(unsigned int i = 0; i < values.size(); i++){
str = str + values[i] + ".";
}
return str;
}