我想使用map创建一个简单的数据存储,
map<int , Person> people;
其中 人 是
class Person
{
string name;
int age;
public:
Person() : name("noname"), age(0) {}
Person(string name, int age) : name(name), age(age) {}
void print()
{
cout << "| " << name << " | " << age << endl;
}
};
我在 map::find() 函数中引用 people.name 时遇到问题。可能我只是不知道正确的语法,我找不到答案。它可能应该看起来像那样,但名称是Person类的元素,所以我想它应该给我一个错误。
if (people.find(name) != people.end())
{
people.erase(name);
cout << name << " removed from data base" << endl;
}
else
{
cout << name << " not found" << endl;
}
很抱歉我的无知,但我最近才开始编程,这就是为什么我不知道基本语法并且有时会感到困惑。
您的问题是您错误地设计了地图。如果你想用名字来查找一个人,那么这个名字必须是地图的键,即
map<string, Person>
其中字符串是名称。
如果你想有一个带有相应对象的name
字典,你是否需要一个std::map<string, Person>
?
在这种情况下,您可以执行以下操作:
auto person = nameToPersonDictionary.find(personName);
if (person != nameToPersonDictionary.end()){
nameToPersonDictionary.erase(personName);
// person is a reference to object Person
}else{ // Not found
}
如果你只想建立一个查找表,你可以考虑std::set。另一个用例,如果name
是对象的不可变属性Person
(即name
永远不会为人修改),set
更适合。
您必须提供运算符<
重载才能使设置正常工作。
提供重载的简单示例是:
// This assumes that there are can't be two distinct person with same name
bool operator<(const Person &left, const Person &right){
return left.name < right.name;
}
然后,您可以使用Person
对象的实例直接查询。