因此,我们有一个学校项目,可以创建一个电话簿,您可以通过搜索名称来查找电话号码。我决定使用带有字符串的地图作为电话号码,并使用名称的字符串向量,因为相关联的号码应该能够包含多个名称。
然而,由于我们从Python直接跳到C ++而没有任何语法或语言的解释,我很难想出一种通过搜索名称来查找数字的方法。
我正在使用的课程看起来像这样
class Telefonbok
{
public:
void add(string namn, string nummer)
{
map<string, vector<string>>::iterator it = boken.find(nummer);
if (it != boken.end())
{
cout << "This number already exists, please choose another";
}
else
{
namn_alias.push_back(namn);
boken[nummer] = namn_alias;
}
}
void lookup(string name)
{
for (map<string, vector<string>>::iterator sokning = boken.begin(); sokning != boken.end(); sokning++)
cout << "Hello!";
}
private:
vector<string> namn_alias;
string nummer;
map<string, vector<string>> boken;
};
我在查找功能中尝试做的是通过向量中的名称搜索电话号码,但我对如何继续查看for-loop中的向量感到难过。
计划是逐个浏览Map键以找到包含搜索到的名称的向量。关于如何进行的任何提示或我错过的一些功能可以用于此吗?
答案 0 :(得分:1)
Algirdas是正确的,你应该阅读C ++。
假设您将名称映射到1个或更多数字,但每个名称只有1个数字......
#include <cstddef>
#include <iostream>
#include <map>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::map;
using std::string;
using std::vector;
class Telefonbok
{
public:
void add(string namn, string nummer) {
auto it = nummer_namn.find(nummer);
if (it != nummer_namn.end()) {
cout << "This number already exists, please choose another" << endl;
}
else {
nummer_namn[nummer] = namn;
namn_nummer[namn].push_back(nummer);
}
}
void lookup(string name) {
auto it = namn_nummer.find(name);
if (it == namn_nummer.end()) {
cout << "Unable to find any numbers for " << name << ", sorry." << endl;
return;
}
for (auto const& sokning : it->second)
cout << name << " : " << sokning << endl;
}
private:
map<string, vector<string>> namn_nummer;
map<string, string> nummer_namn;
};
int main() {
Telefonbok bok;
bok.add("Eljay", "789");
bok.add("Eljay", "456");
bok.add("Beaker", "123");
bok.lookup("Eljay");
bok.lookup("Beaker");
bok.lookup("Bunsen Honeydew");
return EXIT_SUCCESS;
}