|
> また、要素数は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;
}
}
|