2

こんにちは、構造体の演算子をキーとして使用するためにオーバーロードするのに問題があります。これは、マップキーとして使用する予定の構造体です。基本的には、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));
    }
};

私の比較では、product または exchange のいずれかが rhs のものと等しくない限り、キーは一意であると見なされます。これを使用すると、実行時に「無効な演算子 <」が表示されます。私はキーを作成するのがまったく初めてなので、< 演算子を上書きするときのロジックを理解するのにまだ苦労しています。助けてくれてありがとう、ありがとう!

4

1 に答える 1

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、主キーの値が等しい場合にのみ、副キーを考慮する必要があります。

于 2013-04-09T04:18:45.987 に答える