大文字と小文字を区別せずに辞書式に並べ替える必要がある約 10,000 個のアイテムを含むインデックスがあります。
これが私のアプローチです:
bool lowercomp (AbstractServiceProvider::AbstractItem* i, AbstractServiceProvider::AbstractItem* j)
{
std::string a,b;
// lower first string
a.resize(i->title().length());
std::transform(i->title().cbegin(), i->title().cend(), a.begin(),
std::bind2nd(std::ptr_fun(&std::tolower<char>), std::locale("")));
// lower 2nd string
b.resize(j->title().length());
std::transform(j->title().cbegin(), j->title().cend(), b.begin(),
std::bind2nd(std::ptr_fun(&std::tolower<char>), std::locale("")));
return 0 > a.compare(b);
}
私のコードのどこかに:
t = new boost::timer::auto_cpu_timer;
std::sort(_index.begin(), _index.end(), lowercomp);
delete t;
しかし、これには約4秒かかります。toLower 部分がなければ、約 0.003 秒かかります。これを改善する方法はありますか?