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

C++ STLのmultiset::begin()とend()関数の使い方を徹底解説

本記事では、C++ STLにおけるmultiset::begin()関数とmultiset::end()関数の動作、構文、そして具体的な使用例について詳しく解説します。

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

multiset(マルチセット)は、set(セット)コンテナとよく似たコンテナです。setと同様に、値をキーの形式で格納し、特定の順序に従って管理されます。

multisetでも、値はsetと同じくキーとして識別されます。両者の最大の違いは、setのキーが一意である(同じキーが2つ存在しない)のに対し、multisetでは同一のキー値を複数持つことができるという点です。

なお、multisetのキーは二分探索木(binary search tree)の実装にも利用されています。

multiset::begin()とは?

multiset::begin()関数は、C++ STLに組み込まれた関数で、<set>ヘッダーファイル内で定義されています。

この関数は、multisetコンテナの最初の要素を指すイテレータを返します。

multisetコンテナは要素を昇順に格納するため、begin()が返すイテレータは、ソート基準に従ったコンテナの先頭要素を指すことになります。

構文

ms_name.begin();

パラメータ

この関数は引数を受け取りません。

戻り値

この関数は、関連付けられたmultisetコンテナの最初の要素を指すイテレータを返します。

使用例

入力: std::multiset<int> mymultiset = {1, 2, 2, 3, 4};
    mymultiset.begin();
出力: 1

サンプルコード

#include <bits/stdc++.h>
using namespace std;
int main() {
    int arr[] = {2, 4, 1, 3, 8, 5, 6};
    multiset<int> check(arr, arr + 7);
    cout<<"List is : ";
    for (auto i = check.begin(); i != check.end(); i++)
       cout << *i << " ";
    cout<<"\nStarting Element is : "<<*(check.begin());
    return 0;
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

List is : 1 2 3 4 5 6 8
Starting Element is : 1

multiset::end()とは?

multiset::end()関数もまた、C++ STLに組み込まれた関数で、<set>ヘッダーファイル内で定義されています。

この関数は、multisetコンテナの「末尾の次」の位置(past-the-end)を指すイテレータを返します。

「末尾の次」とは、multisetコンテナの最後の要素の直後に位置する場所のことです。つまり、このイテレータはコンテナ内のどの具体的な要素も指していません。この関数は一般的にbegin()と組み合わせて使用され、multisetコンテナ全体の範囲を表すために活用されます。

構文

ms_name.end();

パラメータ

この関数は引数を受け取りません。

戻り値

この関数は、関連付けられたmultisetコンテナの末尾の次の位置を指すイテレータを返します。

使用例

入力: std::multiset<int> mymultiset = {1, 2, 2, 3, 4};
    for( std::multiset<int>::iterator it=mymultiset.begin(); it!=mymultiset.end(); ++it )
出力: 1 2 2 3 4

サンプルコード

#include <bits/stdc++.h>
using namespace std;
int main() {
    int arr[] = {2, 4, 1, 3, 8, 5, 6};
    multiset<int> check(arr, arr + 7);
    cout<<"List is : ";
    for (auto i = check.begin(); i != check.end(); i++)
       cout << *i << " ";
    return 0;
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

List is : 1 2 3 4 5 6 8
  1. 【C++ STL】set::begin()とset::end()の使い方をサンプルコードで解説

    C++のSTLコンテナであるstd::setには、要素を走査するための重要なメンバ関数としてbegin()とend()があります。 set::begin()は双方向イテレータの一種で、setコンテナの先頭要素を指すイテレータを返します。setは自動的に要素が昇順にソートされるため、begin()が指すのは常に最小の値を持つ要素です。 set::end()も同様に双方向イテレータを返しますが、こちらは最後の要素そのものではなく、最後の要素の「次」の位置(終端)を指す点に注意が必要です。つまり、end()が返すイテレータは有効な要素を参照しておらず、主にループの終了条件として使用されます。 サンプ

  2. 【C++ STL】multisetのinsert()関数の使い方とサンプルコードを解説

    C++ STLのmultiset(マルチセット)コンテナにおけるinsert()関数は、新しい要素をコンテナへ挿入するためのメンバ関数です。単に値を指定して挿入する形式と、挿入位置のヒントとなるイテレータを指定する形式があり、状況に応じて使い分けられます。multisetは重複した値を許可し、挿入された要素は常に自動的にソートされた状態で保持されるという特徴を持っています。 使用する主なメンバ関数 ms.size() … マルチセットに現在格納されている要素数を返します。 ms.insert(値) … 指定した値をマルチセットに挿入し、挿入された要素を指すイテレータを返します。 ms.ins