插入集时遇到问题

时间:2020-03-10 00:42:36

标签: c++ set relational-database

我正在尝试将继承自Tuple的{​​{1}}添加到集合中。 (我读过这是一种不好的做法,但是我的教授告诉了我们这一点,并说他希望我们从vector<string>继承此作业)我有一张地图,其中包含一个字符串作为键和一个vector<string>作为价值。 Relation是我们正在为此任务构建的一个类。在Relation中有一个Relation,其中set<Tuple>本质上是Tuple。我的问题是,当我尝试向vector<string>的实例添加Tuple时,我无法这样做。

我第一次尝试添加到集合中时,集合的大小从0更改为1(成功插入),但是在第一个集合之后的每次尝试都将大小保持为1(失败尝试)。

我已经包含了我已经缩小问题范围的代码区域,并包含了我认为需要的所有内容,但是今天已经漫长了一天,所以如果我错过了一些内容,请原谅。

Relation
//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);
}

1 个答案:

答案 0 :(得分:1)

您可以使用调试器并注意

addTuple(...)

方法。

set<...>通常只接受唯一的项目。您的vector<string>元组可能不是唯一的。

您也可以通过重载提供适当的比较运算符方法。