我开始在c++学习地图,我正在努力理解它们。我以为我做了,但后来我开始做这个练习,不知道如何处理它。
输入:n-雇员人数;在n行中输入雇员姓名、姓氏和工资。
输出:在两行中输出薪资最低的员工的姓名、姓氏和薪资,以及薪资最高的员工的姓名、姓氏和薪资。
顺便说一下,这不是家庭作业。我只是一个试图自己学习编程的学生。
地图显然是非常重要的,可能有很多人认为这个问题很有用。
现在,我不知道如何使姓名和薪水之间的关系。这就是我所做的,但这是错误的,我如何在映射中输入值,然后在键和映射值之间建立关系,以便输出所需的输出?:
int n;
cin>>n;
long double sales[n],salary[n];
string name[n],surname[n];
map<long int,string,string>m(n);
long int s;
for(int i=0;i<n;i++)
{ cin>>name[i]>>surname[i]>>sales[i];
s=200+0.06*sales[i];
m.push_back(s);
}请帮帮忙。
发布于 2015-02-06 09:48:37
你已经很好的开始了,但是有几件很重要的事情:
1)地图分为键和值两种类型。如果您需要的不仅仅是“值”中的一个值,为什么不将它们聚合起来:
struct Employee { string name; string surname; long double sale; };
std::map<long int, Employee> m;2)如果要在键处插入值,请使用operator[]
Employee e; cin >> e.name >> e.surname >> e.sale;
... calculate s...
m[s] = e;3)你不需要将销售、薪水、姓名和姓氏定义为数组,这也是不正确的。解密中的索引必须是常数,否则这是一个VLA (存在于C99标准中,但不存在于任何C++中,充其量可以作为gcc扩展)。无论如何,所有的数据都要保存在映射中,所以您只需使用变量作为临时存储。
4)默认情况下,值的排序越来越多。所以最低和最高只是地图的第一个和最后一个元素。
https://stackoverflow.com/questions/28357765
复制相似问题