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