将结构体的操作符重载为映射键

overloading operators for struct as map key

本文关键字:映射 重载 操作符 结构体      更新时间:2023-10-16

嗨,我有问题重载我的结构的操作符作为一个关键。这是我的结构,我打算用它作为映射键,基本上它有两个字符数组:

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的,那么这个键就被认为是唯一的。我使用这个,在运行时得到"无效操作符<"。我是一个全新的创建键,所以我仍然有一些问题理解逻辑时,覆盖<操作符。感谢任何帮助,谢谢!>

你对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是主键,所以只有在主键值相等的情况下才会考虑使用辅助键。