我的代码中的函数集效果不佳。
我在下面写了一些我认为会影响这个问题的代码。
struct CICLO {
set<ARCO_TEMPO> arco_tempo;
int aircraftType; // tipo de aircraft que faz esse ciclo;
float COST;
float reducedCost;
};
bool operator<(const CICLO& obj1, const CICLO& obj2) {
if (obj1.aircraftType < obj2.aircraftType) {
return true;
}
else {
if (obj1.aircraftType == obj2.aircraftType && obj1.COST < obj2.COST - 1e-6) {
return true;
}
else {
if (obj1.aircraftType == obj2.aircraftType && (abs(obj1.COST - obj2.COST) < 1e-6) && obj1.arco_tempo.size() < obj2.arco_tempo.size()) {
return true;
}
else {
if (obj1.aircraftType == obj2.aircraftType && (abs(obj1.COST - obj2.COST) < 1e-6) && obj1.arco_tempo.size() == obj2.arco_tempo.size()) {
bool igual = true;
set<ARCO_TEMPO>::iterator itobj1;
set<ARCO_TEMPO>::iterator itobj2;
for (itobj1 = obj1.arco_tempo.begin(), itobj2 = obj2.arco_tempo.begin(); itobj1 != obj1.arco_tempo.end(); itobj1++,itobj2++) {
if (igual && *itobj1 < *itobj2) {
return true;
} else {
igual = igual && !(*itobj1 < *itobj2);
if (!igual) {
return false;
}
}
}
return false;
}
else{
return false;
}
}
}
}
}
bool is_CycleIT_a_new_one(CICLO &it, set<CICLO> &ConjCiclosAUX) {
return (ConjCiclosAUX.count(it) == 0);
}
当我尝试在一组Cycles中插入一个循环之前,我调用了函数&#34; is_CycleIT_a_new_one()&#34;验证是否已添加循环。只有在否定的情况下,我才会将循环插入到集合中。
我写了我是怎么做到的:
CICLO cc;
set<CICLO> ConjCiclosAUX;
cout << "Before = " << is_CycleIT_a_new_one(cc, ConjCiclosAUX) << endl;
if (is_CycleIT_a_new_one(cc, ConjCiclosAUX) == true) {
ConjCiclosAUX.insert(cc); cout << "add cycle\n";
}
cout << "After = " << is_CycleIT_a_new_one(cc, ConjCiclosAUX) << endl;
但是,并没有添加新的循环。 我有一个新的CICLO cc。 (我确定循环是新的,因为我打印了ConjCiclosAUX集的所有元素,并且它中没有这个循环)。 所以,当我打印出函数&#34; is_CycleIT_a_new_one()&#34;返回,它出现: 之前= 1。 然后,cc应该被添加到集合中。 消息:&#34;添加周期&#34;出现。 然而,当我再次打印出什么样的功能&#34; is_CycleIT_a_new_one()&#34;返回,它出现: = 1之后。 也就是说,cc没有添加到集合中。
为什么会这样?