• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:構造体配列内の文字列検索のよい方法を教えてください)

構造体配列内の文字列検索の効率的な方法を教えてください

このQ&Aのポイント
  • 構造体配列内で指定した文字列を検索する効率的な方法について教えてください。
  • 質問者は、100個のID・PW群から指定された組み合わせが存在するかを検索し、その結果を返したいと考えています。
  • 現在の方法では、単純にforループを使用して要素を1つずつ検索していますが、より簡単かつ高速な方法はあるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.1

検索が一回きりなら、提示の方法が一番早いでしょう。 相当回数検索するなら、ソートしてバイナリサーチとか。 使用される文字に制限があるなら、先頭文字の種類ごとに配列を分けるとか。 たとえば、IDがすべて数値なら、配列を10に分割できますよね。 ハッシュを使うという方法もありますが、100件くらいだと、効果はあまりないかもしれません。

Null0lluN
質問者

お礼

ここにまとめてお礼を書かせていただきます。 皆さん、ありがとうございました。 ベストアンサーはmaru_yoshi_さんかtitokaniさんか迷ったのですが、 titokaniさんにさせていただきます。 構造体内にいろんな変数が合って配列の添え字で人を識別しようとしているので(こんな感じです) struct S_Data { ----int Num; ----char ID[16]; ----char PW[16]; ----int Month; ----int Day; ----int Type; ----float Time; }; として、 IDとPWが合っていたらNumを返して(Numの値は配列の添え字と同じ) 以下例えば printf( "100m走のタイムは%f\n",Data[10].Time); のようにしたいのですが、データはランダムかつ不定期に増えるので、並び替えていると参照部が変わってきてしまうので並び替えは難しいです。 これ質問部に予め書くべきでしたね・・・・・・・

その他の回答 (3)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.4

目的に応じて ハッシュを使うなり ~木を使うなり 書かれてるように単純に検索するなり すればよいかと。

回答No.3

データがソートされている等の保証がない限り、 これ以上実行速度をあげるためには、コードの可読性を犠牲にしなければ無理ですね。

回答No.2

ランダムなデータから一致するものを探すなら総当たりしかないように思えます。 一定のルールに並んだデータから一致するものを探すならバイナリサーチでもいいでしょう。 構造体配列に入れられたデータから検索するのであっても、その構造体配列にデータを いれる処理がどこかにあるはずなので、そのルールはわかっているはず。 それが分かっていれば、探索手順を短くすることも可能でしょう。 もしかすると、構造体配列に入れる際にいろいろな工夫をすることもできるかも。 いずれにせよ、検索そのものの時間コスト、検索の準備(ソートなど)の為のコストを見積もり、 トータルで性能を考える必要があります。

関連するQ&A

専門家に質問してみよう