C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++ STLのset::value_comp()関数を徹底解説!構文・使い方・戻り値

本記事では、C++ STLにおける set::value_comp() 関数について、その構文、動作、そして戻り値を詳しく解説します。

C++ STLにおけるsetとは?

C++ STLのsetは、要素が必ず一意(重複なし)であり、決められた順序で格納されるコンテナです。要素の値そのものが識別子として機能するため、重複した要素を持つことができません。一度setコンテナに追加した値は後から変更できませんが、値の削除や新たな追加は可能です。setは内部的には二分探索木として実装されています。

set::value_comp()とは?

value_comp() はC++ STLに組み込まれた関数で、<set> ヘッダーファイル内で宣言されています。この関数は、setコンテナが要素の比較に使用する比較オブジェクトのコピーを返します。デフォルトでは、このオブジェクトは「小なり(<)」演算子に相当する動作を行います。

これは関数ポインタまたは関数オブジェクトの一種であり、同じ型の2つの値を比較します。最初の要素が2番目の要素より小さい場合はtrueを、そうでない場合はfalseを返します。setコンテナでは値そのものがキーとして扱われるため、要素は常にソートされた状態で格納されます。そのため、value_comp()key_comp() は同じように動作します。

構文

comparison_object set_name.value_comp();

パラメータ

この関数はパラメータを受け取りません。

戻り値

この関数は、関連付けられたsetコンテナの比較オブジェクトを返します。

使用例

入力: set <int> myset = {9, 8, 7, 6, 5};
    set<int>::value_compare cmp = myset.value_comp()
出力: 5 6 7 8 9

サンプルコード

#include <bits/stdc++.h>
using namespace std;
int main(){
    set<int> Set;
    set<int>::value_compare cmp = Set.value_comp();
    for (int i = 0; i <= 10; i++)
        Set.insert(i);
    cout<<"elements in set are: ";
    int front = *Set.rbegin();
    set<int>::iterator i = Set.begin();
    do {
        std::cout << *i << " ";
    }
    while (cmp(*(++i), front));
    std::cout << '\n';
    return 0;
}

コードの解説

このコードでは、まず空のsetを作成し、value_comp() を使って比較オブジェクト cmp を取得しています。0から10までの整数を挿入した後、rbegin() で最大値を取得し、比較オブジェクトを使って先頭から順に要素を出力します。cmp(*(++i), front) がtrueを返す間、つまり次の要素が最大値より小さい間だけループが継続する仕組みです。

出力結果

上記のコードを実行すると、以下の出力が生成されます −

elements in set are : 0 1 2 3 4 5 6 7 8 9
  1. C++ STLのatan2()関数の使い方を徹底解説!構文・戻り値・サンプルコード付き

    atan2()関数は、座標yとxから逆正接(アークタンジェント)を求めるための関数です。ここでいうyとxは、それぞれy座標とx座標の値を指します。atan2()はC++のSTL(標準テンプレートライブラリ)に組み込まれている関数で、<cmath>ヘッダをインクルードすることで利用できます。通常のatan()関数と異なり、atan2()はxの符号も考慮して正しい象限の角度を返すため、実務でも広く使われています。atan2()関数の構文atan2(dataType var1, dataType var2)構文を見ると分かるように、atan2()関数はfloat型、double型、lon

  2. C++ STLのacos()関数とは?使い方をサンプルコード付きで解説

    C++ STLのacos()関数とはacos()関数は、ラジアン単位で与えられた値に対する逆余弦(アークコサイン)を返す関数で、C++のSTLに標準で組み込まれています。この関数は<cmath>ヘッダで定義されています。acos()関数の構文acos(var)構文から分かるように、acos()関数はfloat、double、long doubleのいずれかのデータ型を持つ引数varを1つ受け取ります。引数の値は-1から1の範囲内でなければなりません。範囲外の値を渡した場合はNaN(非数)が返される点に注意が必要です。戻り値は、-πからπの範囲におけるvarの逆余弦(ラジアン単位)で