Как отметили некоторые комментаторы, это в основном вопрос об алгоритме / организации данных.
Вы можете тратить время на создание «организованных» структур данных, таких как таблица оценок для каждого пользователя, хэши, сбалансированные деревья и т. Д .; или вы можете тратить время на поиск "неорганизованных" структур данных. Существуют даже гибридные подходы: создавайте их «дезорганизованными», а затем организуйте их на лету, по мере необходимости (например, растягивайте деревья).
Если у вас уже есть информация о том, что вы «сделаете больше всего», вы можете оптимизировать сейчас. В противном случае, если вы хотите иметь возможность оптимизировать позже, решите, какую функциональность вам требуется, и предоставьте конкретные функции, чтобы «делать все» (добавить имя с набором баллов - добавить одно имя с одним баллом - найти все баллы для конкретного имени - найти N наивысших баллов - найти N наивысших баллов для конкретного имени - любое / все предыдущие и т. д.). Как только все заработает, используйте профилирование, чтобы узнать, куда идет время, а затем выберите способ организации данных, к которым осуществляется доступ с помощью этих функций.
На самом деле, я думаю, что ваш вопрос начинается с «слишком низкого уровня», т. Е. «У меня уже есть этот конкретный набор гвоздей, поэтому какой молоток мне следует использовать», когда, возможно, болты или клей будут лучше. : -)