【C++ STL】map::key_comp()関数の使い方とサンプルコード解説
本記事では、C++ STLにおける map::key_comp() 関数の動作、構文、および具体的な使用例について詳しく解説します。
C++ STLにおけるmapとは?
map(マップ)は連想コンテナの一種で、キー値と対応する値(マップ値)の組み合わせからなる要素を、特定の順序で格納することができます。mapコンテナ内部のデータは、常に関連付けられたキーに基づいて自動的にソートされます。また、mapコンテナ内の値には、それぞれの一意なキーを介してアクセスします。
map::key_comp()とは?
map::key_comp() は、<map> ヘッダーファイルに定義されている関数です。この関数は、キー比較オブジェクトのコピーを返します。デフォルトでは「less than(小なり)」オブジェクトであり、小なり演算子(<)と同等の動作を行います。このオブジェクトは、mapコンテナ内の要素キーの順序を判定するために使用されます。
この関数は2つの引数を受け取り、キー同士を比較します。最初の要素が2番目の要素より小さく、前に配置されるべきである場合は true を返し、そうでない場合は false を返します。
構文
Key_compare.key_comp();
パラメータ
この関数は、引数(パラメータ)を受け取りません。
戻り値
キーの比較に使用される比較オブジェクトを返します。
使用例1:基本的な使い方
入力
map<char, int> newmap; map<char, int> :: key_compare cmp = newmap.key_comp(); newmap['a'] = 1; newmap['b'] = 2; newmap['c'] = 3;
出力
a = 1 b = 2 c = 3
この例では、key_comp() で取得した比較オブジェクト cmp を使って、mapに格納されたキーが昇順に並んでいることを確認できます。
使用例2:int型のキーを持つmapの場合
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, char> TP;
map<int, char>::key_compare cmp = TP.key_comp();
// 要素の挿入
TP[0] = 'a';
TP[1] = 'b';
TP[2] = 'c';
TP[3] = 'd';
cout<<"Elements in the map are : \n";
int val = TP.rbegin()->first;
map<int, char>::iterator i = TP.begin();
do {
cout << i->first << " : " << i->second<<'\n';
} while (cmp((*i++).first, val));
return 0;
}
出力
Elements in the map are: 0 : a 1 : b 2 : c 3 : d
このプログラムでは、rbegin()->first でmap内の最大キーを取得し、key_comp() で得た比較オブジェクトをdo-while文の終了条件として利用しています。これにより、先頭要素から最大キーまでの全要素を順番に出力しています。
使用例3:char型のキーを持つmapの場合
#include <bits/stdc++.h>
using namespace std;
int main() {
map<char, int> TP;
map<char, int>::key_compare cmp = TP.key_comp();
// 要素の挿入
TP['a'] = 0;
TP['b'] = 1;
TP['c'] = 3;
TP['d'] = 2;
cout<<"Elements in the map are : \n";
char val = TP.rbegin()->first;
map<char, int>::iterator i = TP.begin();
do {
cout << i->first << " : " << i->second<<'\n';
} while (cmp((*i++).first, val));
return 0;
}
出力
Elements in the map are: a : 0 b : 1 c : 3 d : 2
char型のキーでも同様に、キーは自動的に昇順(アルファベット順)でソートされ、比較オブジェクトを用いた反復処理が正しく機能していることがわかります。
まとめ
map::key_comp() は、mapコンテナのキー順序を判定するための比較オブジェクトを取得する便利な関数です。デフォルトでは小なり比較が行われますが、カスタム比較関数を指定したmapの場合には、その挙動が反映されたオブジェクトが返されます。イテレーション処理や条件判定と組み合わせることで、柔軟なキー操作が可能になります。
-
C++ STLのiswblank()関数とは?構文・戻り値・サンプルコードを徹底解説
C++のiswblank()関数は、指定されたワイド文字(wide character)が空白文字(ブランク)であるかどうかを判定するための関数です。C言語では「ctype.h」ヘッダーファイルに、C++標準テンプレートライブラリ(STL)では「cctype」ヘッダーファイルに定義されています。 iswblank()関数の構文 int iswblank(wint_t ch) 戻り値: 引数に渡された文字が空白文字であれば0以外の値を返し、空白文字でなければ0を返します。 パラメータ: ch ― 空白文字かどうかを判定する対象の文字です。 使用例 入力: string str = I Love
-
C++ STLのセット(set)とマップ(map)とは?違いと基本的な使い方を解説
セット(std::set)とは セット(Set)は抽象データ型の一種で、要素の値そのものが識別子として機能するため、すべての要素が一意である必要があります。一度セットに追加した要素の値を直接変更することはできませんが、該当する要素を削除してから、変更後の値を新たに挿入し直すことは可能です。 マップ(std::map)とは マップ(Map)は、要素を「キー」と「値」のペアとして格納する連想コンテナです。各要素はキー値(key)とマップ値(mapped value)を持ち、同一のキー値を持つ要素が複数存在することはありません。 以上の説明から、両者の違いは次のように整理できます。 セット: