Трабл вставка в комплект - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь добавить 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;
}

1 Ответ

1 голос
/ 10 марта 2020

Вы можете использовать отладчик и следить за методами

addTuple(...)

.

A set<...> обычно принимает только уникальные предметы. Возможно, ваши vector<string> кортежи не являются уникальными.

Вы также можете предоставить правильный метод оператора сравнения с помощью перегрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...