1

こんにちは私はファイルからデータを読み取り、それをメモリに保存する関数を書き込もうとしています。このメモリを識別するには、axとayの値が必要です。線形ではない可能性があり、異なるx値とy値の間に大きなジャンプが発生する可能性があり、値の量は不明であり、多次元配列の使用を除外します。

std :: mapは必要なことを実行するので使用したかったのですが、複数のキー値をサポートしていません。データを保存するために他に何を使用できますか、またはマップコンテナで使用できるようにX値とY値をマージする方法はありますか?

4

3 に答える 3

3

xと値のペアをy作成し、それをキーとして使用します。

std::map<std::pair<int, int>, whatever>

現状では、マップを順番にトラバースするとx、値は値よりも重要なものとして扱われることに注意してください。値をより重要なものにしたい場合は、それらをペアの最初に配置する必要がありますyy

于 2013-02-19T17:04:21.327 に答える
2

std::pairマップのキーとしてを使用する必要があります。

std::map<std::pair<int, int>, value_type> m;

次を使用してマップに挿入できます。

m[std::make_pair(0, 0)] = some_value;

要素の順序を気にせず、より高速な取得と挿入が必要な場合は、std::unordered_map代わりに試してください。

于 2013-02-19T17:04:09.537 に答える
1

他の人が提案したようにstd::pairを使用することもできますが、キーのデータメンバーを含む単純なクラスを作成することを真剣に検討します。読みやすさが向上し、必要に応じて3番目、4番目、...のメンバーで簡単に拡張できるようになります。

std :: pairで開始し、次に3番目の要素を追加したい場合は、std :: tupleに移動したくなるかもしれませんが、これによりコードが読み取れなくなる可能性があります。

キークラスを作成し、それに適切なコンストラクターを指定するだけです(データメンバーごとに1つの引数)。

于 2013-02-19T17:09:09.053 に答える