印刷例を使用した C++ 標準テンプレート ライブラリ (STL) のマップ
std::map とは?
C++ では、MAP アイテムをマップ形式で格納する連想コンテナです。マップ内の各アイテムは、キー値とマップされた値で構成されます。 2 つのマップされた値が同じキー値を共有することはできません。
キー値は、要素を並べ替えて一意に識別するのに適しています。マップされた値は、キーに関連付けられたコンテンツを格納するためのものです。この 2 つは型が異なる場合がありますが、メンバー型は両方を組み合わせたペア型を介してそれらを組み合わせます。
この C++ チュートリアルでは、次のことを学びます:
- std::map とは?
- std::map を使用する理由
- 構文:
- メンバーの種類:
- 組み込み関数
- 地図要素の反復
- std::map へのデータの挿入
- 地図で検索する
- 地図からデータを削除する
std::map を使用する理由
マップを使用する理由は次のとおりです:
- std::マップは、選択した並べ替え基準に基づいて並べ替えられた順序でのみ一意のキーを格納します。
- キーを使用すると、要素を簡単かつ迅速に検索できます。
- 各キーには 1 つの要素のみが関連付けられます。
- std::map は連想配列として使用できます。
- std::map は、バイナリ ツリーを使用して実装できます (バランス)。
構文:
std::map を宣言するには、次の構文を使用します:
std::map<key_datatype, value_datatype>map_name;
- key_datatype は、マップ キーのデータ型を示します。
- value_datatype は、マップ キーに対応する値のデータ型を示します。
- map_name はマップの名前です。
例:
map<string, int> my_map;
my_map という名前のマップを宣言しました。マップには key として文字列が含まれます 値としてのデータ型と整数
メンバーの種類:
メンバー関数は、次のメンバー型をパラメーターまたは戻り値の型として使用できます:
- key_type: キー (テンプレートの最初のパラメーター)
- mapped_type: T (テンプレートの 2 番目のパラメーター)
- key_compare: 比較 (テンプレートの 3 番目のパラメーター)
- allocator_type: Alloc (テンプレートの 4 番目のパラメーター)
- value_type: ペア
- value_compare: 要素を比較するためのネストされた関数クラス
- 参照: allocator_type::参照
- const_reference: allocator_type::const_reference
- ポインター: allocator_type::ポインタ
- const_pointer: allocator_type::const_pointer
- 反復子: value_type への双方向イテレータ
- const_iterator: const value_type への双方向イテレータ
- reverse_iterator: 逆反復子
- const_reverse_iterator: 定数逆反復子
- difference_type: ptrdiff_t
- size_type: size_t
組み込み関数
std::map には組み込み関数が付属しています。これらのいくつかは次のとおりです:
- begin()- この関数は、イテレータをマップの最初のアイテムに返します。
- size()- この関数は、マップ内のアイテムの数を返します。
- empty()- この関数は、マップが空かどうかを示すブール値を返します。
- 挿入 (ペア (キー、値))- この関数は、新しいキーと値のペアをマップに挿入します。
- find(val)- この関数は、見つかった場合、val 要素に反復子を与えます。それ以外の場合は、m.end() を返します。
- 消去 (反復子の位置)- この関数は、反復子が指す位置にある項目を削除します。
- erase(const g) – この関数は、キー値 g をマップから削除します。
- クリア ()- この関数は、マップからすべてのアイテムを削除します。
マップ要素の繰り返し
マップ要素を反復処理できます。イテレータを作成して、これを使用するだけです。
例:
例 1:
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); cout << "Map size is: " << Students.size() << endl; cout << endl << "Default map Order is: " << endl; for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) { cout << (*it).first << ": " << (*it).second << endl; } }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>std::map へのデータの挿入
insert() 関数を使用して std::map に項目を入力できます。 std::map キーは一意でなければならないことに注意してください。
そのため、最初に各キーがマップに存在するかどうかを確認します。存在する場合、エントリは挿入されませんが、既存のエントリのイテレータが返されます。存在しない場合は、エントリが挿入されます。
関数には次のバリエーションがあります:
- 挿入 (ペア)- このバリエーションでは、キーと値のペアがマップに挿入されます。
- insert(start_itr, end_itr)- このバリエーションでは、別のマップの start_itr と end_itr で定義された範囲内にエントリが挿入されます。
insert_or_assing() 関数は insert() 関数と同じように機能しますが、指定されたキーがマップに既に存在する場合、その値は変更されます。
例 2:
#include <map> #include <iostream> using namespace std; int main() { map<int, int> m{ {1,3} , {2,4} , {3,5} }; m.insert({ 5, 6 }); m.insert({ 1, 8 }); m.insert_or_assign(1, 6); cout << "Key\tElement\n"; for (auto itr = m.begin(); itr != m.end(); ++itr) { cout << itr->first << '\t' << itr->second << '\n'; } return 0; }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>地図で検索
find() 関数を使用して、マップ内の要素をキーで検索できます。キーが見つからない場合、関数は std::map::end を返します。それ以外の場合は、検索された要素の反復子が返されます。
例 2:
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); std::map<int, string>::iterator it = Students.find(201); if (it != Students.end()) { std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n'; } }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>地図からのデータの削除
erase() 関数を使用して、マップから値を削除できます。削除する要素を指す反復子を作成するだけです。その後、反復子が erase() 関数に渡されます。
例 3:
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<std::string, int> my_map; my_map.insert(std::make_pair("cow", 1)); my_map.insert(std::make_pair("cat", 2)); my_map["lion"] = 3; map<std::string, int>::iterator it = my_map.find("cat"); my_map.erase(it); for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it) cout << (*it).first << ": " << (*it).second << endl; return 0; }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>まとめ:
- マップは、アイテムをマップ形式で格納する連想コンテナです。
- マップ内の各アイテムには、キー値とマップされた値があります。
- マップでは、2 つのマップされた値がキー値を共有できません。
- キー値は、要素を並べ替えて一意に識別するのに役立ちます。
- マッピングされた値は、キーに関連付けられたコンテンツの保存に役立ちます。
- C++ マップは一意のキーをソート順に格納します。
- C++ マップを操作するには、要素を反復処理する反復子を作成します。
- イテレータを使用すると、マップからのアイテムの検索や削除などのタスクを実行できます。
C言語