C++ STLにおけるmultisetのcrbegin()とcrend()関数の使い方を徹底解説
本記事では、C++ STLにおける multiset::crbegin() 関数と multiset::crend() 関数の動作、構文、そして具体的な使用例について詳しく解説します。
C++ STLにおけるmultisetとは?
multisetは、setコンテナとよく似た連想コンテナです。setと同様に、値をキーとして格納し、常に特定の順序(既定では昇順)を維持します。
multisetにおいても、値はsetと同じくキーとして識別されます。両者の最大の違いは、setが重複しない一意なキーのみを持つのに対し、multisetでは同じ値のキーを複数個格納できるという点です。
また、multisetのキーは二分探索木(赤黒木)の実装に利用されており、検索・挿入・削除を効率的に行うことができます。
multiset::crbegin()とは?
multiset::crbegin() はC++ STLに組み込まれた関数で、<set> ヘッダーファイルに定義されています。crbegin()は「constant reverse begin」の略であり、multisetコンテナの最後の要素を指す定数逆イテレータを返します。つまり、この関数は multiset::cbegin() の逆バージョンにあたります。
返される定数イテレータは、コンテナの走査(読み取り)にのみ使用可能です。そのため、イテレータを通じてmultisetの要素を変更することはできません。
構文
ms_name.crbegin();
パラメータ
この関数は引数を受け取りません。
戻り値
コンテナの最後の要素を指す定数逆イテレータを返します。
使用例
入力
std::multiset<int> mymultiset = {1, 2, 2, 3, 4};
mymultiset.crbegin();
出力
4
サンプルコード
#include <bits/stdc++.h>
using namespace std;
int main(){
int arr[] = {10, 20, 30, 40, 50, 60};
multiset<int> check(arr, arr + 6);
cout<<"crbegin()関数で取得した最初の要素: "<<*(check.crbegin()) << endl;
for(auto i = check.crbegin(); i!= check.crend(); i++)
cout << *i << " ";
return 0;
}
出力
crbegin()関数で取得した最初の要素: 60 60 50 40 30 20 10
multiset::crend()とは?
multiset::crend() もC++ STLに組み込まれた関数で、<set> ヘッダーファイルに定義されています。crend()は「constant reverse end」の略であり、multisetコンテナの先頭要素の直前の位置を指す定数逆イテレータを返します。これは cend() の逆バージョンに相当します。
crbegin()と同様に、この関数が返す定数イテレータはコンテナの読み取り専用であり、要素の変更には使用できません。主に逆順走査の終端条件として利用されます。
構文
ms_name.crend();
パラメータ
この関数は引数を受け取りません。
戻り値
コンテナの先頭要素の一つ前の位置を指す定数逆イテレータを返します。
使用例
入力
std::multiset<int> mymultiset = {1, 2, 2, 3, 4};
mymultiset.crend();
出力
error
※ crend()が指すのは「有効な要素の直前」であるため、そのまま参照(デリファレンス)すると未定義動作となります。あくまで走査の終端判定に使う関数です。
サンプルコード
#include <bits/stdc++.h>
using namespace std;
int main(){
int arr[] = {10, 20, 30, 40, 50, 60};
multiset<int> check(arr, arr + 6);
cout<<"リスト内の要素: ";
for(auto i = check.crbegin(); i!= check.crend(); i++)
cout << *i << " ";
return 0;
}
出力
リスト内の要素: 60 50 40 30 20 10
-
C++ STLのasinh()関数とは?使い方とサンプルコードを解説
asinh()関数とはasinh()関数は、ラジアンで指定された角度に対する逆双曲線正弦(アークハイパボリックサイン)を返す関数です。C++ STLに標準で組み込まれており、<cmath>ヘッダーをインクルードすることで利用できます。構文asinh(var)上記の構文が示すように、asinh()関数はfloat型、double型、またはlong double型の引数varを1つ受け取ります。この引数には、負の値・正の値・0のいずれも指定可能です。関数はvarの逆双曲線正弦を返します。asinh()関数の基本的な使用例以下のプログラムは、C++でのasinh()関数の使用方法を示した
-
C++ STLのacosh()関数の使い方を徹底解説
C++ STLのacosh()関数とはacosh()関数は、引数として与えられた値の逆双曲線余弦(アークハイパボリックコサイン)を返す関数です。C++の標準テンプレートライブラリ(STL)に組み込まれており、<cmath>ヘッダをインクルードすることで利用できます。acosh()関数の構文acosh(var)構文からわかるように、acosh()関数はfloat型、double型、long double型のいずれかのパラメータvarを受け取ります。このパラメータには1以上の値を指定する必要があります。関数はvarの逆双曲線余弦を返します。acosh()関数の基本的な使用例以下に、C+