C++ で辞書を作成する
胡金庫
2023年10月12日
- C++ でイニシャライザリストコンストラクタを使って辞書を作成する
- C++ でデフォルトのコンストラクタを使用して辞書を作成する
-
copy
コンストラクタを使って C++ で辞書を作成する - C++ で範囲ベースのコンストラクタを使用して辞書を作成する
この記事では、C++ で辞書を作成する方法を紹介します。
C++ でイニシャライザリストコンストラクタを使って辞書を作成する
C++ 標準コンテナライブラリでは、辞書は std::map
と名付けられ、一意のキーを持つソートされたキーと値のペアを実装しています。map
の要素に対する検索、削除、挿入などの操作は対数的に複雑です。このメソッドは中括弧を用いて map
オブジェクトをリテラル値で初期化します。以下のコード例のように、各要素のペアはカンマで区切られていることに注意してください。
#include <iostream>
#include <map>
using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void PrintMap(Map& m) {
cout << "[ ";
for (auto& item : m) {
cout << item.first << ":" << item.second << " ";
}
cout << "]\n";
}
int main() {
map<int, string> map1 = {{
1,
"Apple",
},
{
2,
"Banana",
},
{
3,
"Mango",
},
{
4,
"Raspberry",
},
{
5,
"Blackberry",
},
{
6,
"Cocoa",
}};
cout << "map1 - ";
PrintMap(map1);
cout << endl;
return EXIT_SUCCESS;
}
出力:
map1 - [ 1:Apple 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]
C++ でデフォルトのコンストラクタを使用して辞書を作成する
あるいは、map
型のオブジェクトを与えられたパラメータで宣言し、それぞれのキーと値のペアを別の文で初期化することもできます。このサンプルでは、int
のキーと string
-s の値を持つマップを示しています。これらの文は常にループの中に入れたり、ユーザの入力から値を取得したりすることができますが、これは実世界のアプリケーションのシナリオに適しています。
#include <iostream>
#include <map>
using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void PrintMap(Map& m) {
cout << "[ ";
for (auto& item : m) {
cout << item.first << ":" << item.second << " ";
}
cout << "]\n";
}
int main() {
map<int, string> map2;
map2[1] = "Banana";
map2[2] = "Mango";
map2[3] = "Cocoa";
map2[4] = "Raspberry";
cout << "map2 - ";
PrintMap(map2);
cout << endl;
return EXIT_SUCCESS;
}
出力:
map2 - [ 1:Banana 2:Mango 3:Cocoa 4:Raspberry ]
copy
コンストラクタを使って C++ で辞書を作成する
新しい map
オブジェクトを作成する別の方法として、copy
コンストラクタを利用する方法があります。このメソッドは既存の map
オブジェクトを移動させず、プログラムの実行中に後で再利用できることに注意してください。
#include <iostream>
#include <map>
using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void PrintMap(Map& m) {
cout << "[ ";
for (auto& item : m) {
cout << item.first << ":" << item.second << " ";
}
cout << "]\n";
}
int main() {
map<int, string> map1 = {{
1,
"Apple",
},
{
2,
"Banana",
},
{
3,
"Mango",
},
{
4,
"Raspberry",
},
{
5,
"Blackberry",
},
{
6,
"Cocoa",
}};
map<int, string> map3(map1);
cout << "map3 - ";
PrintMap(map3);
cout << endl;
return EXIT_SUCCESS;
}
出力:
map3 - [ 1:Apple 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]
C++ で範囲ベースのコンストラクタを使用して辞書を作成する
範囲ベースのコンストラクタは、以前のメソッドのもう一つの代替手段です。この方法は、既存の map
オブジェクトのサブセットのキーと値のペアで新しい map
変数を初期化するために利用することができます。この例では、範囲内の最初のキーと値のペアを指定するために find
メソッドを使用します。その結果、新しい map2
変数には、キー値 2
から map1
オブジェクトの最後の要素までのペアが含まれます。
#include <iostream>
#include <map>
using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void PrintMap(Map& m) {
cout << "[ ";
for (auto& item : m) {
cout << item.first << ":" << item.second << " ";
}
cout << "]\n";
}
int main() {
map<int, string> map1 = {{
1,
"Apple",
},
{
2,
"Banana",
},
{
3,
"Mango",
},
{
4,
"Raspberry",
},
{
5,
"Blackberry",
},
{
6,
"Cocoa",
}};
map<int, string> map4(map1.find(2), map1.end());
cout << "map4 - ";
PrintMap(map4);
cout << endl;
return EXIT_SUCCESS;
}
出力:
map4 - [ 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]