2015-03-04 3 views
1

Не уверен, что я опубликовал правильный вопрос для того, что я на самом деле спрашиваю, но вот оно. Я пытаюсь распечатать максимальный и минимальный осадки от вектора sumofrain вместе с соответствующим годом от вектора yearly.векторный справочник C++

Просто, чтобы было ясно, если максимальное количество осадков в векторе sumofrain было 7-м значением в векторе, тогда год, который я хотел бы выводить, является 7-м значением в векторном векторе yearly.

+0

Каков ваш актуальный вопрос? –

+0

Как напечатать максимальное и минимальное значение «sumofrain» (которое я уже сделал) с соответствующим годом в «годном» векторе. Например, если выводимое максимальное значение равно 7-м в векторе sumofrain, то как я могу также вывести 7-е значение в «годном» векторе. @TheForestAndTheTrees – louiej15

+0

@IrrationalPerson В этом вопросе. – louiej15

ответ

1

Учитывая, что векторы yearly и sumofrainявляются не неровными, вы можете просто проверить расстояние от начала.

// Get iterator to the max element in container. 
auto it = std::max_element(std::begin(sumofrain), std::end(sumofrain)); 

// Get index of element pointed to by iterator. 
auto index = std::distance(std::begin(sumofrain), it); 

auto maxRain = *it; 
auto maxYear = yearly[index]; 

std::cout << "Wettest year: " << maxYear << ". "; 
std::cout << "Rainfall recorded: " << maxRain << " mm." << std:: endl; 
+0

при использовании cout для отображения этой переменной я бы использовал? и спасибо за вашу помощь. @snps – louiej15

+0

@ louiej15 Оба 'maxRain' и' maxYear' имеют тип 'double' (тип значения контейнеров), и вы можете вывести их с помощью операторов' std :: cout' и '<<'. – Snps

+0

Это приводит к ошибке: 'it, index, maxYear, maxRain' не называет тип – louiej15

0

Храните суммарное количество осадков на карте года -> двухместный.

std::map<int, double> rainfall; 
while(file >> year >> month >> maxdeg >> mindeg >> afdays >> rainmm >> sunhours) 
    { 
    rainfall[year] += rainmm; 
    frost.push_back(afdays); 
    } 

Затем, когда файл выполняется чтение, найти запись в карте с наименьшим/Наибольшее количество осадков, с помощью например, Finding minimum value in a Map

Итератор, который у вас есть, имеет ->first, который является годом и ->second, что является фактическим количеством осадков за этот год.

0

Вы должны хранить итератор, возвращаемый max_element(sumofrain.begin(),sumofrain.end()) в переменную.

auto itMax = max_element(sumofrain.begin(),sumofrain.end()); 

Тогда, чтобы выяснить, отсчитываемый от нуля индекс найденного элемента:

itMax - sumofrain.begin(); 

И найти значение:

*itMax 
Смежные вопросы