ホームページ > バックエンド開発 > C++ > カスタム `std::set` コンパレータが型不一致エラーを引き起こすのはなぜですか?

カスタム `std::set` コンパレータが型不一致エラーを引き起こすのはなぜですか?

Susan Sarandon
リリース: 2024-12-23 14:11:17
オリジナル
904 人が閲覧しました

Why Does My Custom `std::set` Comparator Cause a Type Mismatch Error?

エラー: カスタム std::set コンパレータ定義の型が一致しません

コード内で、std 内の要素を並べ替えるためのカスタム コンパレータ関数を指定しようとしています。 ::数値順ではなく辞書順を使用して設定します。ただし、エラー メッセージは、カスタム コンパレーターの宣言に型の不一致エラーがあることを示しています。

この問題は、ブール値を返す 2 つの int64_t パラメーターを持つ関数として lex_compare を宣言しているために発生します。ただし、 std::set のテンプレートでは、 std::less<> を実装するコンパレータが必要です。テンプレート。 std::less<>は次のシグネチャを持つ関数オブジェクトです:

template <typename T>
struct less {
  bool operator()(const T& a, const T& b) const;
};
ログイン後にコピー

この問題を解決するには、std::less<> に準拠するように lex_compare を実装する必要があります。サイン。コードを次のように変更します。

struct lex_compare {
  bool operator()(const int64_t& a, const int64_t& b) const {
    stringstream s1, s2;
    s1 << a;
    s2 << b;
    return s1.str() < s2.str();
  }
};

std::set<int64_t, lex_compare> s;
ログイン後にコピー

ここで、lex_compare 構造体は、2 つの int64_t 引数を受け取り、std::less<> の署名と一致するブール値を返す、operator() 関数を実装します。 。 std::set の定義でこのカスタム コンパレータを指定すると、要素を辞書順に並べ替えるためにセットの順序付け動作を変更できます。

以上がカスタム `std::set` コンパレータが型不一致エラーを引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート