首页 > 解决方案 > 无法插入到集合中

问题描述

我正在尝试将Tuple继承自vector<string>的 a 添加到集合中。(我读过这是不好的做法,但我的教授告诉我们这一点,并说他希望我们从vector<string>无论如何继承这个作业)我有一个地图,其中包含一个字符串作为键和 aRelation作为值。Relation是我们正在为此作业构建的课程。在其中 a本质上是Relationa 。我的问题是,当我尝试将 a 添加到实例时,我无法这样做。set<Tuple>Tuplevector<string>TupleRelation

我第一次尝试添加到集合时,集合的大小从 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;
}

标签: c++setrelational-database

解决方案


您可以使用调试器并注意

addTuple(...)

方法。

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

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


推荐阅读