我想使用map
创建一个简单的数据存储map<int , Person> people;
Person是
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时遇到问题。可能我只是不知道正确的语法,我找不到答案。它可能应该看起来像那样,但 name 是 Person 类的元素,所以我想它应该给我一个错误。
if (people.find(name) != people.end())
{
people.erase(name);
cout << name << " removed from data base" << endl;
}
else
{
cout << name << " not found" << endl;
}
对不起我的无知,但我最近开始编程,这就是为什么我不知道基本语法并且有时会感到困惑。
答案 0 :(得分:0)
您的问题是您错误地设计了地图。如果你想使用一个名字来查找一个人,那么名字必须是地图的关键,即
map<string, Person>
其中字符串是名称。
答案 1 :(得分:0)
如果您想要一个包含相应对象的std::map<string, Person>
字典,是否需要name
?
在这种情况下,你可以这样做:
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
对象的实例直接查询。