-1

いくつかの値の C スタイルの配列がありました。メモリ節約のためのマップにする必要がありました(一度にすべてを割り当てて保持するのではなく、必要に応じて割り当てます)...セットにするか、さらに最適化してベクトルにすることができます。しかし、私は 1 つの痛ましい問題に遭遇しました:val * v; auto val_index = v - val_collectionアイテム ID を与えるために使用されていました... 現在、そのようなコードはコンパイルされません。それは std::vector の場合ですか?

4

1 に答える 1

2

std::distanceコンテナ(または他のシーケンス)の先頭からの距離を与えることができます:

std::vector<val>::iterator v = whatever();
size_t val_index = std::distance(val_collection.begin(), v);

ランダム アクセス コンテナー ( を含むvectorが、 を含まないmap) の場合、必要に応じて次を使用することもでき-ます。

size_t val_index = v - val_collection.begin();
于 2013-03-25T15:14:05.190 に答える