C++で構造体配列から最大値を検索する方法
はじめに
本記事では、C++を使って構造体配列の中から最大値を持つ要素を検索する方法を解説します。例として、以下のような「身長(フィートとインチ)」を表す構造体が与えられた場合を考えます。
struct Height{
int feet, inch;
};この構造体型の配列から、最も身長の高い要素を見つけることが目標です。
アルゴリズムの考え方
アプローチは非常にシンプルです。以下の手順で処理を進めます。
- 配列を先頭から順に走査する。
- 各要素の身長をインチ単位に換算する。換算式は「
12 × フィート + インチ」。 - 現在の最大値と比較し、より大きい値が見つかれば、その値とインデックスを更新する。
最終的に、最大値を持つ要素のインデックスが求まります。
実装例(C++コード)
#include<iostream>
#include<algorithm>
using namespace std;
struct Height{
int feet, inch;
};
int maxHeight(Height h_arr[], int n){
int index = 0;
int height = INT_MIN;
for(int i = 0; i < n; i++){
int temp = 12 * (h_arr[i].feet) + h_arr[i].inch;
if(temp > height){
height = temp;
index = i;
}
}
return index;
}
int main() {
Height h_arr[] = {{1,3},{10,5},{6,8},{3,7},{5,9}};
int n = sizeof(h_arr)/sizeof(h_arr[0]);
int max_index = maxHeight(h_arr, n);
cout << "Max Height: " << h_arr[max_index].feet << " feet and " << h_arr[max_index].inch << " inches";
}実行結果
Max Height: 10 feet and 5 inches
コードの解説
上記のプログラムでは、maxHeight関数が配列を走査し、各要素をインチ単位に換算した値を順番に比較しています。比較の初期値としてINT_MIN(int型が表現できる最小値)を設定しているため、どのような入力値に対しても正しく動作します。
サンプルデータでは、{10, 5}(10フィート5インチ=125インチ)が最大となるため、その要素のインデックスが返され、結果として「10フィート5インチ」が出力されます。
計算量
このアルゴリズムは配列を一度だけ走査するため、時間計算量はO(n)、必要な追加メモリはO(1)です。要素数が多い配列でも効率的に最大値を検索できる、非常に実用的な方法です。
-
C++で配列内の数値の頻度(出現回数)を求める方法
配列に n 個の異なる要素が格納されているとします。この配列の中から、特定の要素が何回出現するか(頻度)を調べたい場合があります。例えば、配列 A = [5, 12, 26, 5, 3, 4, 15, 5, 8, 4] の中で「5」の頻度を調べると、答えは 3 になります。アルゴリズムの考え方この問題は、次の手順で解くことができます。1. 配列を左端から順に走査します。2. 現在の要素が調べたい数値と一致したら、カウンターを1つ増やします。3. 一致しない場合は、そのまま次の要素へ進みます。4. 配列の最後まで走査したら、カウンターの値が頻度となります。このアルゴリズムの計算量は O(n) で
-
C++でSTLを使って配列の積を求める方法
C++では、STL(標準テンプレートライブラリ)のaccumulate関数を利用することで、配列内のすべての要素の積を簡潔に求めることができます。ここでは、その具体的な実装例を紹介します。 アルゴリズム 開始 配列の各要素の値を初期化する。 ユーザー定義関数 accumulate を呼び出し、配列全体の積を取得する。 計算結果を出力する。 終了 サンプルコード #include <iostream> #include <numeric> using namespace std; int ProductOfArray(int p[], int n)