在 C++ 中访问映射中对象的成员函数
Accessing Member Functions of Objects in a Map in C++
据我了解,如果我在以下任何方面有误,请纠正我,容器用于存储对象..
地图是一个关联容器,它将对象存储为 "elements"。
如果是这样,我如何访问这些对象的成员函数(例如 setter 和 getter),就像我在创建没有映射来设置参数的对象时所做的那样?
或者换句话说,我怎样才能做相当于:
someClass someObject;
someObject.setSomething(InputVari);
一张地图?
您需要使用[] operator。
myMap[myIndex].setVariable(aValue);
例如,如果您想创建一个 class 人物的地图,其中人物有名字、姓氏和当前位置,以及 setCurrentLocation(std: :string aNewLocation) 参数它看起来像下面这样。
std::map<char, Person> myMap;
Person myPerlmaoooosonOne("Phill", "Collins", "England");
myMap['A'] = myPersonOne;
myMap['A'].setNewLocation("New York")
correct me if i am wrong on any of the following, containers are used to store objects
不一定。在某些情况下,存储指向对象的指针更可取,例如当对象很大时,因此获取对象的副本是昂贵的。另一种情况是对象是多态的,你想在容器中存放不同派生类的对象。存储指针可以防止 object slicing。
访问对象的成员:
class Foo{ int A; void bar(){} };
map<string, Foo*> myMap;
auto it = myMap.find("keyToObject");
if(it != myMap.end()) {
it->A += 1; it->bar();
}
在将 []
与 std::map
一起使用时,您需要 小心 ,考虑到 []
只是一个方便的事实insert()
的符号。 myMap[k]
的结果等同于 (∗(myMap.insert(make_pair(k,V{})).first)).second
的结果,其中 V
是映射类型。
据我了解,如果我在以下任何方面有误,请纠正我,容器用于存储对象.. 地图是一个关联容器,它将对象存储为 "elements"。
如果是这样,我如何访问这些对象的成员函数(例如 setter 和 getter),就像我在创建没有映射来设置参数的对象时所做的那样?
或者换句话说,我怎样才能做相当于:
someClass someObject;
someObject.setSomething(InputVari);
一张地图?
您需要使用[] operator。
myMap[myIndex].setVariable(aValue);
例如,如果您想创建一个 class 人物的地图,其中人物有名字、姓氏和当前位置,以及 setCurrentLocation(std: :string aNewLocation) 参数它看起来像下面这样。
std::map<char, Person> myMap;
Person myPerlmaoooosonOne("Phill", "Collins", "England");
myMap['A'] = myPersonOne;
myMap['A'].setNewLocation("New York")
correct me if i am wrong on any of the following, containers are used to store objects
不一定。在某些情况下,存储指向对象的指针更可取,例如当对象很大时,因此获取对象的副本是昂贵的。另一种情况是对象是多态的,你想在容器中存放不同派生类的对象。存储指针可以防止 object slicing。
访问对象的成员:
class Foo{ int A; void bar(){} };
map<string, Foo*> myMap;
auto it = myMap.find("keyToObject");
if(it != myMap.end()) {
it->A += 1; it->bar();
}
在将 []
与 std::map
一起使用时,您需要 小心 ,考虑到 []
只是一个方便的事实insert()
的符号。 myMap[k]
的结果等同于 (∗(myMap.insert(make_pair(k,V{})).first)).second
的结果,其中 V
是映射类型。