次のデータ構造を考えると、私の質問は十分に単純std::vector<std::pair<int, std::unique_ptr<foo>>>
です。
auto it = std::find_if(begin(v), end(v), [&](std::pair<...> const& p){ return p.first == some_value; });
ポインターが指しているものが何であれ、純粋に検索操作のためにキャッシュにフェッチされないことを期待できますか (フェッチしたくないので、必要に応じて後でプリフェッチします)。それとも、これを判断することは不可能ですか(そうであれば、質問を閉じます..)