C++ set的insert,结构体的操作符重载需要面面俱到

来源:互联网 发布:淘宝助理天猫版界面 编辑:程序博客网 时间:2024/06/06 09:46

教训:操作符重载需要面面俱到!

今天在实验代码中遇到一个问题,set 的insert函数不能给我插入两个不一样的结构体,纠结了一下午最终发现是我的 < 操作符重载 出现问题,原代码段如下:

ITEM item("S1 -> S",0,0,"#");
ITEM item1("S1 -> S",0,0,"=");

set<parser::ITEM> st1;
st1.insert(item1);
st1.insert(item);


set<parser::ITEM>::iterator it;
parser::ITEM xx;
for(it=st1.begin(); it != st1.end(); it++)
 {
      xx = (*it);
       xx.print();//打印该结构体
}

此时< 操作符重载函数如下:

bool LR_ITEM::operator<(const LR_ITEM & item)const
{
    if(item.GetNum() < NUM)return true;
    else return item.POS < POS;
}

此时set之中只有item2。若上述函数改为:

bool LR_ITEM::operator<(const LR_ITEM & item)const
{
    if(item.GetNum() < NUM)return true;
    else if(item.GetNum() == NUM)
    {
        if(item.GetPos() == POS)return item.exp_symbol < exp_symbol;
        else return item.GetPos() < POS;
    }
}

可以得到预想的结果。

0 0
原创粉丝点击