У меня есть программа, которая переносит подмножество другого вектора в векторе, как ссылки на индексы.
std::vector<foo> knowledgeBase;
std::vector<int> workingSet;
Работает ли этот класс сравнения?
class Compare
{
bool operator()(int lft, int rgt)
{
return knowledgeBase[lft].bar() > knowledgeBase[rgt].bar();
}
};
Сравнение - этовложенный класс в классе, который содержит базу знаний, поэтому у меня есть доступ к переменным, но индекс, ссылающийся на наименьшее значение, никогда не возвращается workingSet.front ();
Что я делаю неправильно?Я могу опубликовать больше кода, если это необходимо (что имеет дополнительные несвязанные ошибки, которые я не могу проверить, потому что это не работает), но я точно знаю, что мой make_heap не создает нужную кучу.
В случае, если я делаю что-то действительно глупое, мой вызов make_heap выглядит следующим образом:
std::make_heap(workingSet.begin(), workingSet.end(), Compare());
Edit: bar - это размер () для std :: set internal для foo.Этот набор не является пустым и не определен, потому что я могу вывести его содержимое (и проверить его как правильное).Хотя для этого используется итератор ... разве этого недостаточно?
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.
Что происходит?
Я понимаю, что это далеко выходит за рамки моего основного вопроса, и есть фрагменты, не определенные в приведенном мною коде, но я работаю над этой проблемой уже около шести часови до сих пор понятия не имею, что происходит.