Консультация № 190266
10.12.2016, 20:16
0.00 руб.
1 6 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:

Помогите вывести максимальный элемент "map" через max_element. Почему выдает ошибку...
Код:
#include <iostream>
#include <cstdlib>
#include <map>
#include <iterator>
#include <algorithm>
#include <C:\prog\11\2\Time.h>
using namespace std;
typedef map<int, Time>TMap;//определяем тип для работы со словаре
typedef TMap::iterator it;
Time avg;
//функция для формирования словаря
TMap make_map(int n)
{
TMap m;//пустой словарь
Time a;
for(int i=0;i<n;i++)
{
cin>>a;
//создаем пару и добавляем ее в словарь
m.insert(make_pair(i,a));
}
return m ;//возвращаем вектор как результа работы функции
}


//функция для печати словаря
void print_map(TMap m)
{
for(int i=0;i<m.size();i++)
cout<<i<<" - "<<m[i]<<" "<<endl;
}
Time srednee(TMap m)
{
Time s=m[0];//первый элемент – начальное значение суммы
//перебор словаря
for(int i=1;i<m.size();i++)
s=s+m[i];
int n=m.size();//количество элементов в словаре
return s/n;
}
void upd(Time&t)
{
t=t+avg;
}
int main(int argc, char *argv[])
{
TMap m;
int n;
cout<<"-----------------map.begin------------------"<<endl;
cout<<"Enter n=";
cin>>n;
m=make_map(n);
print_map(m);
cout<<"Zadanie 1.Max element insert:"<<endl;
//поставили итератор i на максимальный элемент
it r=max_element(m.begin(),m.end());
//int rr=(*r);
//int rr=(*r).second;
cout<<"Max element="<<*r<<endl;
cout<<"Zadanie 3.Update:"<<endl;
avg=srednee(m);//нашли среднее арифметическое вектора
cout<<"AVG="<<avg<<endl;
//for_each(m.begin(),m.end(),upd); // для каждого элемента добавили среднее
cout<<"-----------------map.end------------------"<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Прикрепленные файлы:
c36bc08c506208de6db95bb42c47ac51c9c78578.png

Обсуждение

давно
Советник
400484
472
12.12.2016, 10:47
общий
Адресаты:
Обычно так указывают заголовочные файлы входящие в состав компилятора
Код:

#include <C:\prog\11\2\Time.h>

обычно файлы пользователя указываются в кавычках
Код:

#include "C:\prog\11\2\Time.h"


Возможно, опечатка тут
Код:

it r=max_element(m.begin(),m.end());

может нужно так
Код:

int r=max_element(m.begin(),m.end());
давно
Посетитель
400153
18
12.12.2016, 21:11
общий
Адресаты:
Здравствуйте. А подскажите пожалуйста, как использовать for_each для "map", например так for_each(m.begin(),m.end(),upd), но он почем-то ругается...
давно
Посетитель
400153
18
13.12.2016, 21:45
общий
Подскажите, как вставить максимальный элемент в конец "словаря"
Код:
Time max = (m.end(),max_element(m.begin(),m.end(),
[](pair<int, Time> A, pair<int, Time> B)
{
return A.second < B.second;
}
)->second);
давно
Старший Модератор
17042
808
15.12.2016, 05:12
общий
Адресаты:
Оформите ответ?
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
давно
Советник
400484
472
15.12.2016, 15:22
общий
это ответ
Здравствуйте, User194586!
Код:

int main(int argc, char *argv[])
{
TMap m;
int n;
cout << "-----------------map.begin------------------" << endl;
cout << "Enter n=";
cin >> n;
m = make_map(n);
print_map(m);
cout << "Zadanie 1.Max element insert:" << endl;
//поставили итератор i на максимальный элемент
it r = max_element(m.begin(), m.end());
cout << "Max element = " << r->first << " (" << r->second << ")" << endl;
cout << "Zadanie 3.Update:" << endl;
avg = srednee(m);//нашли среднее арифметическое вектора
cout << "AVG=" << avg << endl;
//for_each(m.begin(),m.end(), upd); // для каждого элемента добавили среднее
cout << "-----------------map.end------------------" << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
давно
Советник
400484
472
15.12.2016, 15:24
общий
Цитата: User194586
solowey:
Здравствуйте. А подскажите пожалуйста, как использовать for_each для "map", например так for_each(m.begin(),m.end(),upd), но он почем-то ругается...

Пока ответ не дам, проблема с временем...

На вопрос ответ дал...
Форма ответа