我将提供下面的所有代码,因为我无法找出错误在哪里。
我不明白为什么要为最终函数打印两次标题
任何帮助都非常感谢。我在网上看过的所有笔记和代码似乎都和我有相同的代码结构,所以我不明白为什么它不起作用。
#include <iostream>
#include <unordered_map>
#include <vector>
#include <iomanip>
#include <algorithm>
using namespace std;
int findDate (unordered_map <int, string> employeeInfo, string employeeName)
{
int answer = -1;
for(auto item:employeeInfo)
{
if(item.second==employeeName)
answer=item.first;
}
return answer;
}
int totalSignedUp (unordered_map <int, string> employeeInfo)
{
int count=0;
for (auto item:employeeInfo)
count=count+1;
return count;
}
void printMonth (string title, unordered_map <int, string> employeeInfo)
{
cout<<title<<"\n";
printf("Date Name of Employee\n");
for(auto item: employeeInfo)
{
cout << item.first << " " << item.second << endl;
}
}
int main()
{
unordered_map <int, string> employeeInfo;
employeeInfo[1]="Ben";
employeeInfo[2]="Erica";
cout<<findDate(employeeInfo, "Erica")<<"\n";
cout<<totalSignedUp(employeeInfo)+"\n";
printMonth("Volunteers", employeeInfo);
}
对不起张贴我的整个代码,但我不能查明问题出在哪里。
1条答案
按热度按时间xxhby3vn1#
您的代码存在以下几个问题:
1.你传递的是
std::unordered_map
的值,这意味着函数正在处理Map的临时副本,临时副本在函数结束时被销毁,因此当函数返回时你不会看到任何变化。1.您正在编写不需要编写的函数。一个明显的例子是您正在使用循环来查找
std::unordered_map
中的键值。这完全违背了unordered_map
的用途,因为它是用于快速查找的。您应该使用unordered_map::find()
方法来搜索键值。1.您有可以编译的代码,但可能由于打字错误而明显错误。
下面是一个例子:
cout<<totalSignedUp(employeeInfo)+"\n";
显然,不必要的
+
不应该存在。下面是代码的重写,解决了列出的问题:
输出:
不是最漂亮的输出,但它似乎。
所做的更改基本上是上面概述的关于您正在犯的错误的内容。
1.注意,使用
using
为unordered_map
提供别名,这使得编码更简单、更简洁。1.注意使用
unordered_map::find()
搜索日期。1.在
addEmployee
中,使用unordered_map::insert()
。如果该项已经存在,则返回的std::pair
具有将设置为false
的second
。这将替换将bool
设置为false
的整个逻辑。1.当搜索名字时,因为名字不是键值,所以这里必须进行线性搜索,
std::find_if
用于线性搜索Map,返回的迭代器将指向找到的条目,如果没有找到,则指向employeeInfo.end()
。其余的改动应该是不言自明的。