make_heap没有堆积
我有一个程序,它在向量中包含另一个向量的子集,作为索引的引用。
std::vector<foo> knowledgeBase;
std::vector<int> workingSet;
这个比较课是否有效?
class Compare
{
bool operator()(int lft, int rgt)
{
return knowledgeBase[lft].bar() > knowledgeBase[rgt].bar();
}
};
Compare是包含knowledgeBase的类中的嵌套类,因此我可以访问变量,但是workSet.front()不会返回引用最小值的索引。
我究竟做错了什么?如果需要,我可以发布更多代码(其中包含我无法测试的其他无关错误,因为这不起作用)但我确实知道我的make_heap没有创建我想要的堆。
如果我正在做一些非常愚蠢的事情,我的make_heap调用如下:
std::make_heap(workingSet.begin(), workingSet.end(), Compare());
编辑:bar是foo :: set内部到foo的size()。这个集合不是空的,也不是未定义的,因为我可以输出它的内容(并验证它们是否正确)。虽然那是使用迭代器......这还不够吗?
Edit2:经过进一步的研究,我发现bar()总是返回1.我添加了一个int,并且每次添加变量时都会增加,就像这样......
foo::foo()
{
siz = 0;
}
void foo::addLiteral(std::string var, bool truth)
{
literals.insert(Literal(var,truth));
++siz;
}
class foo()
{
public:
foo();
void addLiteral(std::string var, bool truth);
bool bar(){return siz;}
private:
int siz;
std::set<Literal, LiteralComp> literals;
}
foo初始化如下:
...
foo newClause;
ss.str(input);
ss >> variable;
while(!ss.fail())
{
if(variable[0] == '~')
{
variable = variable.substr(1);
truth = false;
}
else truth = true;
newClause.addLiteral(variable, truth);
ss >> variable;
}
knowledgeBase.push_back(newClause);
workingSet.push_back(count++);
...
并且foo.size()
仍然总是返回1。
到底是怎么回事?
我意识到这远远超出了我的主要问题的范围,并且我已经给出了代码中没有定义的部分,但我现在已经在这个问题上工作了六个小时但仍然不知道会发生什么上。
没有找到相关结果
已邀请:
2 个回复
迪擅哨乘傅
很抱歉浪费任何人的时间。
裸雷胜檀哭
不会增加向量的实际大小,因此
将无操作。