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

わんくま同盟

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

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


(過去ログ 53 を表示中)
■29475 / )  Re[1]: 配列の要素を検索する方法
□投稿者/ επιστημη (1442回)-(2008/12/10(Wed) 11:18:19)
επιστημη さんの Web サイト
> また、要素数は10万を超えるので時間短縮の為ループは避けたいと思っています。

10万回のループっていまどきそんなに遅くないんちゃう?
実測したほがよろしいかと。

さもなくば文字と位置のペアを辞書に投げ込むかなー

#include <iostream>
#include <algorithm>
#include <iterator>
#include <map>
using namespace std;

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

  // アタマから舐めて探す
  for ( char* p = a; (p = std::find(p, a+N, 'n')) != a+N; ++p ) {
    cout << "nの位置は" << std::distance(a,p) << endl;
  }

  // 文字と位置のペアを辞書に投げ込む
  typedef multimap<char,int> map_type;
  map_type m;
  for ( int i = 0; i < N; ++i ) {
    m.insert(make_pair(a[i],i));
  }
  for ( pair<map_type::iterator,map_type::iterator> range = m.equal_range('n');
        range.first != range.second;
        ++range.first ) {
    cout << "nの位置は" << range.first->second << endl;
  }
}

返信 編集キー/


管理者用

- Child Tree -