C++ STLのset find()関数の使い方を解説
C++ STLのsetコンテナにおけるfind()関数は、指定した要素を検索し、その要素を指すイテレータを返します。もし要素がセット内に存在しない場合は、最後の要素の直後の位置(つまりend()が返すイテレータ)を指す値が返されます。
この関数の計算量はO(log n)であり、setが内部的に平衡二分探索木(赤黒木)で実装されているため、高速な検索が可能です。
アルゴリズム
Begin
セットコンテナの要素を出力するための関数 printS() を定義する。
空のセットコンテナ s を初期化し、いくつかの要素を挿入する。
関数を呼び出して、セットコンテナの要素を出力する。
set の find() 関数を呼び出して、s 内から要素を検索する。
もし要素がセット内に存在するならば
「要素はセット内に存在します」と出力する。
そうでなければ
「要素はセット内に存在しません」と出力する。
End.サンプルコード
以下の例では、find()関数を使って値「6」を検索し、その位置以降の要素を順に出力しています。
#include<iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
set<int> s;
set<int>::iterator it;
s.insert(7);
s.insert(6);
s.insert(1);
s.insert(4);
s.insert(2);
s.insert(9);
s.insert(10);
auto pos = s.find(6);
cout << "The set elements after 6 are: ";
for ( it = pos; it != s.end(); it++)
cout << *it << " ";
return 0;
}出力結果
The set elements after 6 are: 6 7 9 10
要素の存在確認のポイント
find()関数は、戻り値がs.end()と等しいかどうかを比較することで、要素の有無を判定できます。以下のように記述するのが一般的です。
if (s.find(6) != s.end()) {
cout << "6 はセット内に存在します";
} else {
cout << "6 はセット内に存在しません";
}この方法を使えば、要素が見つかった場合にはその位置のイテレータをそのまま活用でき、見つからなかった場合も安全に判定できるため、C++でのセット検索の基本パターンとして覚えておくと便利です。
-
C++ STLのacos()関数とは?使い方をサンプルコード付きで解説
C++ STLのacos()関数とはacos()関数は、ラジアン単位で与えられた値に対する逆余弦(アークコサイン)を返す関数で、C++のSTLに標準で組み込まれています。この関数は<cmath>ヘッダで定義されています。acos()関数の構文acos(var)構文から分かるように、acos()関数はfloat、double、long doubleのいずれかのデータ型を持つ引数varを1つ受け取ります。引数の値は-1から1の範囲内でなければなりません。範囲外の値を渡した場合はNaN(非数)が返される点に注意が必要です。戻り値は、-πからπの範囲におけるvarの逆余弦(ラジアン単位)で
-
C++ STLのasinh()関数とは?使い方とサンプルコードを解説
asinh()関数とはasinh()関数は、ラジアンで指定された角度に対する逆双曲線正弦(アークハイパボリックサイン)を返す関数です。C++ STLに標準で組み込まれており、<cmath>ヘッダーをインクルードすることで利用できます。構文asinh(var)上記の構文が示すように、asinh()関数はfloat型、double型、またはlong double型の引数varを1つ受け取ります。この引数には、負の値・正の値・0のいずれも指定可能です。関数はvarの逆双曲線正弦を返します。asinh()関数の基本的な使用例以下のプログラムは、C++でのasinh()関数の使用方法を示した