Вам нужно структурировать свои данные. В настоящее время вы относитесь к словам и количествам абсолютно одинаково, и поэтому они печатаются в одном списке с номерами перед словами, потому что цифры в алфавитном порядке идут перед словами.
Сначала создайте структуру для ваших данных
struct LineItem
{
int quantity;
string choice;
};
Теперь, в отличие от строк, компилятор не знает, как сортировать LineItems, вы должны сообщить ему, предоставив operator<
для LineItems. Оператор <должен возвращать истину, если первый LineItem «меньше» второго LineItem. Я предполагаю (возможно, неправильно), что вы хотите печатать в алфавитном порядке вариантов. Так что это будет </p>
bool operator<(const LineItem& x, const LineItem& y)
{
return x.choice < y.choice;
}
Затем объявите ваш набор как набор LineItems
set<LineItem> sortedItems;
Затем переписать ваш цикл ввода
for (int i = 1; ; i++)
{
LineItem li;
cout << i << ". ";
cin >> li.quantity;
cin >> li.choice;
if (li.choice == "exit")
break;
sortedItems.insert(li);
}
Что-то подобное в любом случае. Вам нужно будет внести другие изменения, например, ваша процедура печати должна будет изменить использование LineItems вместо строк, но я оставлю это вам.
Суть в том, что, создавая структуру LineItem, вы группируете связанных элементов данных (количество и выбор), чтобы затем вы могли распечатать их вместе.