在C 中的地图中访问对象的成员功能

Accessing Member Functions of Objects in a Map in C++

本文关键字:成员 功能 对象 地图 访问      更新时间:2023-10-16

从我的理解中,如果我在以下任何一个上错了,请纠正我,可以使用容器来存储对象。地图是一个关联容器,它将对象存储为"元素"。

如果是这样,我如何访问这些对象的成员函数(例如设置器和getters),例如我在没有地图设置参数的情况下创建对象时的操作方式?

或以其他方式放置,我该如何做:

someClass someObject;
someObject.setSomething(InputVari);

地图?

您需要使用[]运算符。

myMap[myIndex].setVariable(aValue);

例如,如果您想创建具有钥匙字符的班级人员的地图看起来像以下内容。

std::map<char, Person> myMap;
Person myPerlmaoooosonOne("Phill", "Collins", "England");
myMap['A'] = myPersonOne;
myMap['A'].setNewLocation("New York")

如果我在以下任何一个上错了,请纠正我,使用容器来存储对象

不一定。在某些情况下,将存储对象的指针存储是可取的,例如当对象很大时,因此对象的副本很昂贵。另一种情况是当对象是多态性的时,您想将不同派生类的对象存储在容器中。存储指针可防止对象切片。

访问对象的成员:

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