3


0

特定の要素がc ++ STLベクトルに存在するかどうかを確認する

v [i]のようにアクセスする前に、要素が特定のベクトル位置、たとえばiに存在するかどうかを確認したかったのです。 どうしたらいいですか。

ありがとうございました。

5 Answer


9


if (0 <= i  &&  i < v.size()) {
  // OK
  std::cout << v[i]; // Example
} else {
  // Wrong
}


4


ベクトルは要素の連続したシーケンスであり、「穴」は不可能なので、要素はすべての位置「i」に存在することが保証されます。「i> = 0」および「i <v.size()」


2


`v.size()`を使用します。


1


要素がベクトルに存在するかどうかを知りたい場合、最も簡単な方法は、配列を並べ替えてから、バイナリ検索などの検索方法を使用することです。

このアクションが何度も実行される場合、おそらくデータ構造を変更するとパフォーマンスが向上します。 std

mapはこれに適しています。また、コンパイラにある場合は、ハッシュテーブルまたはマップを使用してください。

それ以外の場合、ベクトルにアクセスせずに値がベクトルに存在するかどうかを判断する唯一の方法は、2番目のデータ構造を使用して値と位置を記憶することです。


0


特定の次元に事前に割り当てられた `std

vector`があること、たとえばnを使用して、インデックス` i`( i <n)の要素が初期化されたのか、単に割り当てられたのかを見たいと思います。

@Thomas Matthewsが言ったように、2番目のデータ構造、単純な bool [n]`を使用できます。この場合、インデックス `k`で、インデックス k`の要素が vector`の場合、 true`を格納します。存在し、そうでなければ false

      0 1 2 3 4 5
v = [ *   *   * * ]

             0     1      2     3     4     5
exists = [ true, false, true, false, true, true ]