Вот 100% рабочий вариант -)
Первая часть где ввод данных и вычисление максимального бала - не изменилась. И кстати занимать памяти это дело будет всего 782 Кбайта при количестве элементов 100000.
И я никак не пойму твою идею насчет выкидывания каких-то данных в процессе ввода. Данные можно проанализировать после того как они все введены, иначе будет неполный анализ.
И совет небольшой - не занимайся пока никакой оптимизацией. Сперва просто напиши любой код, каким бы ужасным он не был, который просто справляется с поставленной задачей - это главное. Потом с опытом прийдут в голову более оптимальные решения.
Код:
#include <tchar.h>
#include <iostream>
#include <string>
#include <map>
struct SCHOOLINFO
{
int school;
int grade;
};
int _tmain(int argc, _TCHAR* argv[])
{
std::map<int, int> schoolmap;
std::string name;
int count, maxgrade = 0;
std::cout << "Enter number of students" << std::endl << "> ";
std::cin >> count;
SCHOOLINFO *info = new SCHOOLINFO[count];
std::cout << "Enter fname lname school grade for students" << std::endl;
for (int i = 0; i < count; i++)
{
std::cout << "#" << i + 1 << "> ";
std::cin >> name >> name >> info[i].school >> info[i].grade;
if (info[i].grade > maxgrade)
{
maxgrade = info[i].grade;
}
}
int school, maxcount = 0;
for (int i = 0; i < count; i++)
{
if (info[i].grade == maxgrade)
if (schoolmap.count(info[i].school) == 0)
schoolmap.insert(std::make_pair(info[i].school, 1));
else
{
schoolmap[info[i].school]++;
if (schoolmap[info[i].school] > maxcount)
{
maxcount = schoolmap[info[i].school];
school = info[i].school;
}
}
}
std::cout << "winner school " << school << std::endl;
delete[] info;
return 0;
}