Если кратко, то пусть у нас есть N записей вида:
struct Node {
string a, b;
int c, d, e;
};
Пользователь вводит 3 числа - номера полей, по которым нужно отсортировать наши N записей.
Сортировка - внутренняя, с помощью бинарного дерева. С сортировкой по одному полю всё ясно и понятно - строим дерево используя в качестве ключей выбранное поле.
А что делать с сортировкой по нескольким полям?
UPD#1
Конечно, как вариант, для каждого поля строить своё бинарное дерево и сортировать по первому полю-дереву и вдруг, если ключи совпали, сортировать по следующему полю-дереву и т. д. Так будет правильно?