将struct的运算符重载为map键

时间:2013-04-09 04:14:51

标签: c++

您好我在重载我的struct的运算符以用作键时遇到问题。这是我打算用作映射键的结构,基本上它有2个char数组:

struct FConfig
{
    char product[3];
    char exchange[4];
    bool operator < (const FConfig &rhs) const
    {
        return (strcmp(product, rhs.product) < 0 || 
                 strcmp(exchange, rhs.exchange <0));
    }
};

我的比较是只要产品或交换中的一个不等于rhs,那么该密钥被认为是唯一的。我使用这个,我得到“无效的运算符&lt;”在运行时。我是创建密钥的新手,所以在覆盖&lt;时,我仍然无法理解逻辑。运营商。感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:4)

您对operator <应如何运作的困惑很常见。你希望它看起来像这样:

bool operator < (const FConfig &rhs) const
{
   int product_comparision = strcmp(product,rhs.product);
   if (product_comparision<0) return true;
   if (product_comparision>0) return false;
   return strcmp(exchange,rhs.exchange)<0;
}

由于product是您的主键,因此您唯一考虑辅助键的时间是主键值是否相等。