あなたが探しているアルゴリズムはnth_elementです。これは、範囲を部分的に並べ替えて、n 番目の要素が完全に並べ替えられた範囲内の場所になるようにします。たとえば、上位 3 つの項目を降順で表示したい場合は、(疑似 C++ で) 次のように記述します。
nth_element(begin, begin + 3, end, predicate)
問題は、nth_element が std::map で機能しないことです。したがって、データ構造をペアのベクトルに変更することをお勧めします (処理するデータの量によっては、とにかくこれがより高速なデータ構造であることがわかる場合があります)。したがって、あなたの例の場合、次のように書きます。
typedef vector<pair<string, int>> MyVector;
typedef MyVector::value_type ValueType;
MyVector v;
// You should use an initialization list here if your
// compiler supports it (mine doesn't...)
v.emplace_back(ValueType("key1", 10));
v.emplace_back(ValueType("key2", 3));
v.emplace_back(ValueType("key3", 230));
v.emplace_back(ValueType("key4", 15));
v.emplace_back(ValueType("key5", 1));
v.emplace_back(ValueType("key6", 66));
v.emplace_back(ValueType("key7", 10));
nth_element(v.begin(), v.begin() + 3, v.end(),
[](ValueType const& x, ValueType const& y) -> bool
{
// sort descending by value
return y.second < x.second;
});
// print out the top three elements
for (size_t i = 0; i < 3; ++i)
cout << v[i].first << ": " << v[i].second << endl;