为什么set的功能插入不起作用?

时间:2018-03-19 18:31:16

标签: c++ insert set

我的代码中的函数集效果不佳。

我在下面写了一些我认为会影响这个问题的代码。

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没有添加到集合中。

为什么会这样?

0 个答案:

没有答案