整数のリストから整数を検索する必要があります。それらを並べ替え、lower_bound を使用して、指定された整数が収まる範囲を見つけます。これには O(lgn) が必要です。これよりもうまくやる方法はありますか?
以下は改善のヒントです。
- 指定されたリストは常に正の整数です
- リストは固定です。挿入も削除もありません。
1 つの方法は、配列を作成し、配列にインデックスを付けることです。これは、スペース効率が悪い場合があります。unordered_map を使用できますか? どのハッシュ関数を定義すればよいですか?
// Sort in reverse order to aid the lookup process
vector<unsigned int> sortedByRange;
//... sortedByRange.push_back(..)
sort(sortedByRange.begin(), sortedByRange.end(), greater);
Range = (sortedByAddress_.begin() - sortedByRange.end();
std::cout<<"Range :"<<Range<<std::endl; //prints 3330203948
std::pair<unsigned int, unsigned int> lookup(unsigned int addr){
pair<unsigned int, unsigned int> result;
vector<unsigned int>::iterator it = lower_bound(sortedByRange.begin(),
sortedByRange.end(), addr);
result.first = *it;
result.second = *(it++);
return result;
}