C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 53 を表示中)
■29505 / )  Re[3]: 配列の要素を検索する方法
□投稿者/ あんどちん (31回)-(2008/12/10(Wed) 12:32:36)
キーはcharなんだし素直に配列で参照した方が早いと思うんですけどそういうもんでもないんでしょうか?
charをハッシュにした方が早くなるってのがよくわからなくて^^;

#include <iostream>
#include <vector>
using namespace std;

int main() {
const int N = 8;
char a[N] = {'m','o','u','n','t','a','i','n'};

// 文字に対応する配列要素に位置を入れる
typedef vector<int> position;
position m[256];
for ( int i = 0; i < N; ++i ) {
m[static_cast<unsigned char>(a[i])].push_back(i);
}

for(position::iterator it = m[static_cast<unsigned char>('n')].begin();
it != m[static_cast<unsigned char>('n')].end();
++it) {
cout << "nの位置は" << *it << endl;
}
}

要素位置をpush_backするときにメモリを再確保されるのが気に入らなければreserveしておけば防ぐことも可能です。
入れる文字がアルファベットと数字だけなら配列は256も要らないでしょうが10万文字分の位置を保存することを考えたら誤差の範囲かな?オフセットの計算減らせるし

返信 編集キー/


管理者用

- Child Tree -