我正在尝试将继承自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);
}
答案 0 :(得分:1)
您可以使用调试器并注意
addTuple(...)
方法。
set<...>
通常只接受唯一的项目。您的vector<string>
元组可能不是唯一的。
您也可以通过重载提供适当的比较运算符方法。