C++ STLのmultimap::value_comp()関数とは?使い方とサンプルコードを徹底解説
本記事では、C++ STLにおけるmultimap::value_comp()関数の働き、構文、そして具体的な使用例について詳しく解説します。
C++ STLのmultimapとは?
Multimap(マルチマップ)は、mapコンテナに似た連想コンテナの一種です。キーと値(mapped value)の組み合わせからなる要素を、特定の順序で格納することができます。通常のmapとの最大の違いは、同じキーに対して複数の要素を関連付けられるという点です。なお、コンテナ内部のデータは常に、関連付けられたキーに基づいて自動的にソートされます。
multimap::value_comp()とは?
multimap::value_comp()は、C++ STLに組み込まれている関数で、<map>ヘッダーファイル内で宣言されています。この関数は、multimapコンテナが要素の比較に使用している比較オブジェクトのコピーを返します。デフォルトでは、このオブジェクトは「〜より小さい(less-than)」演算子と同様に機能します。
これは関数ポインタまたは関数オブジェクトの一種であり、同一のmultimap内にある同じ型の2つの値を比較します。最初の要素が2番目の要素よりも小さい場合には true を返し、そうでない場合には false を返します。
構文
multi_name.value_comp();
パラメータ
この関数は、いかなるパラメータも受け取りません。
戻り値
この関数は、対象のmultimapコンテナに関連付けられた比較オブジェクトを返します。
基本的な使い方
value_comp()で取得した比較オブジェクトを使えば、2つの要素(key-valueペア)を直接比較することもできます。
入力例:
multimap<char, int> newmap;
newmap.insert(make_pair('a', 1));
newmap.insert(make_pair('b', 2));
newmap.insert(make_pair('c', 3));
auto cmp = newmap.value_comp();
cout << cmp(make_pair('a', 1), make_pair('b', 2)); // true → 1
cout << cmp(make_pair('c', 3), make_pair('a', 1)); // false → 0
出力:
10
使用例
次に、multimap::value_comp()を使って、コンテナ内のすべての要素を先頭から末尾まで順番に出力するプログラムを見てみましょう。
#include <iostream>
#include <map>
using namespace std;
int main(){
multimap<int, char> mul;
//指定したキーへ要素を挿入
mul.insert(make_pair(0, 'A'));
mul.insert(make_pair(1, 'B'));
mul.insert(make_pair(2, 'C'));
mul.insert(make_pair(3, 'D'));
pair<int, char> temp = *mul.rbegin();
multimap<int, char>::iterator it = mul.begin();
cout<<"Elements at given key is : "<<'\n';
do {
cout << (*it).first << " = " << (*it).second << '\n';
}
while (mul.value_comp()(*it++, temp));
return 0;
}
コードのポイント
このプログラムでは、int型のキーとchar型の値を持つmultimapを作成し、4つの要素を挿入しています。rbegin()によって最後尾の要素を事前に取得しておき、do-whileループの中でvalue_comp()を呼び出すことで、「現在の要素が最後の要素より小さい間」繰り返し処理を続けます。これにより、value_comp()が返す比較オブジェクトを活用した要素の走査が実現できます。
出力
上記のコードを実行すると、以下のような出力が生成されます。
Elements at given key is :
0 = A
1 = B
2 = C
3 = D
-
C++ STLのatan2()関数の使い方を徹底解説!構文・戻り値・サンプルコード付き
atan2()関数は、座標yとxから逆正接(アークタンジェント)を求めるための関数です。ここでいうyとxは、それぞれy座標とx座標の値を指します。atan2()はC++のSTL(標準テンプレートライブラリ)に組み込まれている関数で、<cmath>ヘッダをインクルードすることで利用できます。通常のatan()関数と異なり、atan2()はxの符号も考慮して正しい象限の角度を返すため、実務でも広く使われています。atan2()関数の構文atan2(dataType var1, dataType var2)構文を見ると分かるように、atan2()関数はfloat型、double型、lon
-
C++ STLのacos()関数とは?使い方をサンプルコード付きで解説
C++ STLのacos()関数とはacos()関数は、ラジアン単位で与えられた値に対する逆余弦(アークコサイン)を返す関数で、C++のSTLに標準で組み込まれています。この関数は<cmath>ヘッダで定義されています。acos()関数の構文acos(var)構文から分かるように、acos()関数はfloat、double、long doubleのいずれかのデータ型を持つ引数varを1つ受け取ります。引数の値は-1から1の範囲内でなければなりません。範囲外の値を渡した場合はNaN(非数)が返される点に注意が必要です。戻り値は、-πからπの範囲におけるvarの逆余弦(ラジアン単位)で