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
-
【C++ STL】set::begin()とset::end()の使い方をサンプルコードで解説
C++のSTLコンテナであるstd::setには、要素を走査するための重要なメンバ関数としてbegin()とend()があります。 set::begin()は双方向イテレータの一種で、setコンテナの先頭要素を指すイテレータを返します。setは自動的に要素が昇順にソートされるため、begin()が指すのは常に最小の値を持つ要素です。 set::end()も同様に双方向イテレータを返しますが、こちらは最後の要素そのものではなく、最後の要素の「次」の位置(終端)を指す点に注意が必要です。つまり、end()が返すイテレータは有効な要素を参照しておらず、主にループの終了条件として使用されます。 サンプ
-
【C++ STL】multisetのinsert()関数の使い方とサンプルコードを解説
C++ STLのmultiset(マルチセット)コンテナにおけるinsert()関数は、新しい要素をコンテナへ挿入するためのメンバ関数です。単に値を指定して挿入する形式と、挿入位置のヒントとなるイテレータを指定する形式があり、状況に応じて使い分けられます。multisetは重複した値を許可し、挿入された要素は常に自動的にソートされた状態で保持されるという特徴を持っています。 使用する主なメンバ関数 ms.size() … マルチセットに現在格納されている要素数を返します。 ms.insert(値) … 指定した値をマルチセットに挿入し、挿入された要素を指すイテレータを返します。 ms.ins