Pythonの辞書(dict)をC++に変換するには?mapとunordered_mapの使い方を解説
Pythonの辞書(dict)は、内部的にはハッシュマップとして実装されています。C++では、標準ライブラリのmapデータ構造を使うことで、Pythonの辞書とほぼ同じ動作を再現できます。
C++のmapを使った基本的な実装例
以下のコードは、初期化リストを使ってmapを作成し、その内容をすべて出力する例です。
#include <iostream>
#include <map>
using namespace std;
int main(void) {
/* 初期化リストコンストラクタ */
map<char, int> m1 = {
{'a', 1},
{'b', 2},
{'c', 3},
{'d', 4},
{'e', 5}
};
cout << "Map contains following elements" << endl;
for (auto it = m1.begin(); it != m1.end(); ++it)
cout << it->first << " = " << it->second << endl;
return 0;
}
このプログラムを実行すると、次のような出力が得られます。
Map contains following elements a = 1 b = 2 c = 3 d = 4 e = 5
上記のC++のmapは、以下のPythonの辞書と同等です。
m1 = {
'a': 1,
'b': 2,
'c': 3,
'd': 4,
'e': 5
}
unordered_mapを使うとさらにPythonのdictに近づく
std::mapは内部で平衡二分探索木(赤黒木)を使用しているため、要素へのアクセスはO(log n)です。一方、Pythonの辞書はハッシュテーブルベースで、平均O(1)でのアクセスが可能です。よりPythonの辞書に近い性能特性が必要な場合は、C++11以降で利用できるstd::unordered_mapを選ぶとよいでしょう。
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int main(void) {
unordered_map<string, int> m1 = {
{"apple", 100},
{"banana", 200},
{"orange", 300}
};
cout << "banana = " << m1["banana"] << endl;
return 0;
}
まとめ
Pythonの辞書をC++で再現する場合は、キーと値のペアを格納できる連想配列であるstd::mapまたはstd::unordered_mapを使うのが基本です。キーを順序付きで管理したい場合はmap、検索速度を優先したい場合はunordered_mapというように、用途に応じて使い分けることで、Pythonの辞書と同等の処理を効率的に実現できます。
-
Pythonのtranslate()メソッドで文字列を一括置換・翻訳する方法
Pythonでは、文字列内の複数の文字をまとめて別の文字に置き換えたい場合、translate()メソッドを使うと効率的です。このメソッドは、str.maketrans()関数で作成した変換テーブルに基づいて文字を変換した新しい文字列のコピーを返します。また、オプションとして削除したい文字を指定すれば、該当する文字をすべて取り除くことも可能です。基本的な使い方以下の例では、母音「aeiou」をそれぞれ数字「12345」に対応付けて文字列を変換しています。intab = aeiou outtab = 12345 trantab = str.maketrans(intab, outtab) st
-
Python関数で辞書を返す方法とは?基本の書き方とサンプルコード
Pythonでは、関数から辞書(dict)を返す方法がいくつかあります。ここでは、最も基本的なパターンを中心に、具体的なサンプルコードとともに分かりやすく解説します。 基本の方法:dict()で辞書を作成してreturnする まずは、関数内でdict()コンストラクタを使って空の辞書を生成し、キーと値を追加したうえでreturn文で返す方法です。 # この関数は辞書を返します def foo(): d = dict() d[str] = Tutorialspoint d[x] = 50 return d print(foo()) 実行結果 {x: 50,