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

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

  1. C++ STLのasinh()関数とは?使い方とサンプルコードを解説

    asinh()関数とはasinh()関数は、ラジアンで指定された角度に対する逆双曲線正弦(アークハイパボリックサイン)を返す関数です。C++ STLに標準で組み込まれており、<cmath>ヘッダーをインクルードすることで利用できます。構文asinh(var)上記の構文が示すように、asinh()関数はfloat型、double型、またはlong double型の引数varを1つ受け取ります。この引数には、負の値・正の値・0のいずれも指定可能です。関数はvarの逆双曲線正弦を返します。asinh()関数の基本的な使用例以下のプログラムは、C++でのasinh()関数の使用方法を示した

  2. C++ STLのacosh()関数の使い方を徹底解説

    C++ STLのacosh()関数とはacosh()関数は、引数として与えられた値の逆双曲線余弦(アークハイパボリックコサイン)を返す関数です。C++の標準テンプレートライブラリ(STL)に組み込まれており、<cmath>ヘッダをインクルードすることで利用できます。acosh()関数の構文acosh(var)構文からわかるように、acosh()関数はfloat型、double型、long double型のいずれかのパラメータvarを受け取ります。このパラメータには1以上の値を指定する必要があります。関数はvarの逆双曲線余弦を返します。acosh()関数の基本的な使用例以下に、C+