NSDictionary
タイトルが示すように、C++ 用の Objective-C に似た辞書はありますか? (キー、値) ペアを保持し、追加および取得できるデータ構造が必要なだけです。
4 に答える
std::map を使用します。
たとえば、整数から std::string にマップするには:
#include <map>
#include <string>
#include <iostream>
int main() {
std::map<int, std::string> my_map;
my_map[3] = "hello";
my_map[4] = "world";
std::cout << my_map[3] << " " << my_map[4] << std::endl;
return 0;
}
C++ では std::map または std::unordered_map (NSDictionary は順不同) を使用できますが、大きな違いが 1 つあります。標準のテンプレート ライブラリは値の型にテンプレートを使用するため、マップはキーと値の両方に対してそれぞれ 1 つの型にロックされます。NSDictionary では、すべてが NSObject に基づいているため、型を組み合わせることができます。
データが同種であれば、すべて準備完了です。混合型の動作が必要な場合は、使用するすべての型を含むか派生できるカスタム クラスを作成する必要があります。
標準テンプレート ライブラリの std::map を確認してください。それはあなたが必要とすることをします。
他の人があなたの質問に既に回答しており、私はそれらを +1 しました。役に立つかもしれない情報がもう少しあると感じているので、私も行きます。
はい、C++ にはstd::map
. ただし、これは O(log n) 検索/挿入の複雑さを持つ順序付けられた連想コンテナーです。多くの場合、ハッシュ テーブルが好まれます。その目的のために、O(1) ベスト ケース ルックアップを備えたstd::unordered_mapがあります。
多くの場合、ソートされたツリーよりもハッシュ テーブルが優先されます (ただし、常にそうとは限りません)。パフォーマンスが重要な場合、標準の C++ ハッシュ テーブルの実装は適切ではない可能性があります。結局のところ、それは非常に一般的です。したがって、Google Sparse Hashプロジェクトを参照してください。これは、パフォーマンスを向上させ、トレードオフ (つまり、速度とメモリなど) を持つ高密度ハッシュと疎ハッシュの実装を提供します。詳細については、ドキュメントを参照してください。
C++ をどれだけ真剣に学習しているかはわかりませんが、もう少し学習したい場合は、他のさまざまなコンテナーとアルゴリズムの豊富なセットに驚かれることでしょう。SGI の STL ドキュメントを見つけて、10 年以上使用しているので、あなたにもお勧めします - http://www.sgi.com/tech/stl/table_of_contents.html。少し古いかもしれませんが、とても便利です。これが、C++ に標準で付属しているものです。その上で、標準ライブラリの一部ではないさまざまなライブラリのセットである Boost をチェックしてください - http://www.boost.org/doc/libs/release/
それが役に立てば幸い!