C++ で配列に要素が含まれているかどうかをチェックする
- C++ で配列に要素が含まれているかどうかをループでチェックする
-
C++ で
std::find
を使用して配列に要素が含まれているかどうかをチェックする -
C++ で
Std::Count
を使用して配列に要素が含まれているかどうかをチェックする -
C++ で
std::binary_search
を使用して配列に要素が含まれているかどうかをチェックする -
C++ で
any_of()
関数を使用して配列に要素が含まれているかどうかをチェックする - まとめ
C++ でアレイを操作しているときに、アレイに C++ の要素が含まれているかどうかを確認する必要がある場合もあります。これはループを使用して簡単に実行できますが、他の効率的な方法でも同じことができます。
この記事では、C++ の配列に要素が存在するかどうかを確認するさまざまな方法について説明します。読む。
C++ の標準ライブラリは、配列に C++ の要素が含まれているかどうかを確認するために使用できるいくつかのアルゴリズムと関数を提供します。しかし、最初に、ループを使用してこれを行う方法を見てみましょう。
C++ で配列に要素が含まれているかどうかをループでチェックする
for
ループを使用して、物事を非常に単純に保つことができます。以下のコードには、points
という名前の配列と、key
という名前で検索する必要のある要素があります。
main
ブロック内では、for
ループを使用してすべての要素を直線的に調べます。各反復で、現在の要素が探している要素と同じであるかどうかを確認します。
key
要素が見つかると、ループが中断され、ブール変数 present
の値が false
に更新されます。後で、この変数 present
の値に基づいて、目的の出力を出力します。
コード例:
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int points[] = {23, 45, 56, 12, 34, 56};
int key = 56;
bool present = false;
for (int i : points) {
if (i == key) {
present = true;
break;
}
}
if (present) {
cout << "The element is present";
} else {
cout << "The elment is not present";
return 0;
}
出力:
The element is present
これは配列内の要素を検索する最も簡単な方法ですが、同じことを行うための他のより良い方法があります。これらについては、次のセクションで説明します。
C++ で std::find
を使用して配列に要素が含まれているかどうかをチェックする
std::find
関数は、主に特定の範囲の要素を検索するために使用されます。この関数は、範囲 [first, last)
の間で必要な要素を検索します。
構文:
InputIterator find(InputIterator first, InputIterator last, const T& val);
以下は、std::find
関数を使用して配列内の要素を検索するコードです。ここでは、ブール変数 present
と std::find
関数を使用して、配列 points
を反復処理します。
関数 std::find
は 3つの引数を取ります:
- 変数
points
は、アレイの初期位置の反復子として機能します - 式
points+x
は、配列の最後の位置の反復子として機能します - 検索する値である変数
key
値が見つからない場合、この関数は反復子を配列の最後に返しますが、変数 present
値に基づいて目的のステートメントを出力できます。
コード例:
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int points[] = {23, 45, 56, 12, 34, 56};
int key = 56;
int x = sizeof(points) / sizeof(*points);
bool present = std::find(points, points + x, key) != points + x;
if (present) {
cout << "The element is present";
} else {
cout << "The element is not present";
}
return 0;
}
出力:
The element is present
上記の引数を渡すのがわかりにくい場合は、begin()
関数と end()
関数をそれぞれ使用して、配列の最初と最後に 2つの反復子を渡すこともできます。
コード例:
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int points[] = {23, 45, 56, 12, 34, 56};
int key = 56;
bool present = std::find(begin(points), end(points), key) != end(points);
if (present) {
cout << "The element is present";
} else {
cout << "The element is not present";
}
return 0;
}
出力:
The element is present
begin()
および end()
関数を直接使用してコードを簡略化する方法をご覧ください。前のコードの引数と同じように機能します。
C++ で Std::Count
を使用して配列に要素が含まれているかどうかをチェックする
もう 1つの方法は、アルゴリズム std::count
を使用することです。基本的に、このアルゴリズムは、特定の範囲で要素が検出された回数をカウントします。
カウントの戻り値がゼロでない場合、これは要素が配列に存在することを意味します。std::count
アルゴリズムは、範囲 [first, last)
間の要素の出現もカウントします。
構文:
int counter(Iterator first, Iterator last, T &val)
コードを見て、それがどのように機能するかを理解してください。
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int points[] = {23, 45, 56, 12, 34, 56};
int key = 56;
cout << std::count(begin(points), end(points), key);
}
出力:
2
この関数に必要な引数を渡し、結果を出力する方法をご覧ください。key
値 56
は配列 points
の 2つの場所に存在するため、出力は 2
として取得されます。
次に、これをブール変数 present
とマージして、key
変数のカウントがゼロより大きいかどうかを確認します。はいの場合、それは単に要素が配列に存在することを意味します。
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int points[] = {23, 45, 56, 12, 34, 56};
int key = 56;
bool present = std::count(begin(points), end(points), key) > 0;
if (present) {
cout << "The element is present";
} else {
cout << "The element is not present";
}
return 0;
}
出力:
The element is present
当然、このアルゴリズムは、配列全体をトラバースして要素の数を見つけるため、std::find
よりもパフォーマンスが遅くなります。
C++ で std::binary_search
を使用して配列に要素が含まれているかどうかをチェックする
配列がソートされている場合、配列に C++ の要素が含まれているかどうかを確認する最も効率的な方法は、バイナリ検索アルゴリズムを使用することです。C++ の標準ライブラリは、同じことを行うための binary_search
アルゴリズムを提供します。
std::binary_search
アルゴリズムは、要素が [first, last)
の範囲で見つかった場合、値 true
を返します。それ以外の場合は、false
を返します。
以下のコードでは、checkEle()
という関数を作成しました。この関数内で、最初に sort()
関数を使用して配列をソートし、次に std::binary_search
アルゴリズムを使用して key
要素を検索します。。
コード例:
#include <algorithm>
#include <iostream>
using namespace std;
bool checkEle(int a[], int x, int key) {
if (x <= 0) {
return false;
}
sort(a, a + x);
return std::binary_search(a, a + x, key);
}
int main() {
int points[] = {23, 45, 56, 12, 34, 56};
int key = 56;
int x = sizeof(points) / sizeof(*points);
bool present = checkEle(points, x, key);
if (present) {
cout << "The element is present";
} else {
cout << "The element is not present";
}
return 0;
}
出力:
The element is present
これは、配列がすでにソートされている場合にのみ役立ちます。これは、最初に sort()
関数を使用して配列をソートすると、時間の複雑さがさらに増すためです。
C++ で any_of()
関数を使用して配列に要素が含まれているかどうかをチェックする
any_of()
関数を使用して、述語が特定の範囲に存在する要素に準拠しているかどうかを確認できます。はいの場合、true
を返します。それ以外の場合は、false
を返します。
構文:
template <class InputIterator, class UnaryPredicate>
bool any_of(InputIterator begin, InputIterator end, UnaryPredicate p);
コードを見て、述語がどのように定義されているかを理解してください。ここでは、any_of()
関数を呼び出すとともに、現在の要素が検索している key
と等しいかどうかを同時にチェックする and
条件も使用します。
いずれかの要素で条件が満たされると、ブール変数 present
の値が true
に更新されます。
#include <algorithm>
#include <array>
#include <iostream>
using namespace std;
int main() {
int points[] = {23, 45, 56, 12, 34, 56};
int key = 56;
bool present =
std::any_of(begin(points), end(points), [&](int i) { return i == key; });
if (present) {
cout << "The element is present";
} else {
cout << "The element is not present";
}
return 0;
}
出力:
The element is present
これは、any_of()
関数が配列内の要素を検索する方法です。これは、C++ で配列内の要素を検索する方法についてのすべてです。
まとめ
この記事では、配列に C++ の要素が含まれているかどうかを確認するためのさまざまなアプローチについて説明しました。C++ でこれに単純な for
ループがどのように使用され、std::find
、std::count
、std::binary_search
などのアルゴリズムでも機能することを確認しました。
ただし、これらの方法はすべて同じ目標を達成します。あなたが好きな最良のアプローチを決めるのは完全にあなた次第です。