在 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 是映射类型。