カスタム std::set コンパレータの使用
概要:
並べ替えおよび検索アルゴリズム、カスタム コンパレータは、コンテナ内の要素の代替順序を指定するために使用されます。これにより、特定の基準に基づいたカスタムの並べ替えや検索が可能になります。 std::set コンテナーのカスタム コンパレーターを定義する方法を見てみましょう。
ケース スタディ:
数値の代わりに辞書順に並べる整数のセットを考えてみましょう。注文すること。これは、数値的には「10000」の方が大きい場合でも、要素「1234」と「10000」は (辞書編集的に) 順序どおりに扱われる必要があることを意味します。
エラーと解決策:
あなたが遭遇したエラーは、g が特定のテンプレート パラメータ リストに準拠するコンパレータを予期しているためです。 「テンプレート
解決策:
std のカスタム コンパレーターを定義するには、いくつかの方法があります。 ::set:
1.最新の C 20 ソリューション:
C 20 以降では、ラムダ関数をコンパレータとして直接使用できます:
auto cmp = [](int a, int b) { return a < b; }; // Arbitrary example std::set<int, decltype(cmp)> s;
2.最新の C 11 ソリューション:
C 11 以降では、set コンストラクターでラムダ関数を使用できます:
auto cmp = [](int a, int b) { return a < b; }; // Arbitrary example std::set<int, decltype(cmp)> s(cmp);
3。関数オブジェクト:
ブール値を返す Operator() 関数を使用して関数オブジェクトを定義できます:
struct Compare { bool operator()(const int &a, const int &b) { return a < b; } // Arbitrary example }; std::set<int, Compare> s;
4。 std::integral_constant:
std::integral_constant を使用して、暗黙的に関数ポインターに変換する型を作成できます:
#include <type_traits> struct Compare { bool operator()(const int &a, const int &b) { return a < b; } // Arbitrary example }; using Cmp = std::integral_constant<decltype(&Compare::operator()), &Compare::operator()>; std::set<int, Cmp> s;
結論:
カスタム コンパレータを定義すると、次のようになります。セット内の要素の順序をより詳細に制御できるため、特定の並べ替え要件を達成できます。
以上がstd::set コンテナのカスタム コンパレータを定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。