用C ++访问Map中对象的成员函数

时间:2016-12-12 02:13:50

标签: c++ object stl containers member

根据我的理解,并纠正我,如果我在以下任何一个错误,容器用于存储对象.. map是一个关联容器,它将对象存储为" elements"。

如果是这样,我如何访问这些对象的成员函数(例如setter和getter),就像我在创建没有map来设置参数的对象时的做法一样?

或以另一种方式,我怎么能做相当于:

someClass someObject;
someObject.setSomething(InputVari);

的地图?

2 个答案:

答案 0 :(得分:0)

您需要使用[] operator

std::map<char, Person> myMap;

Person myPersonOne("Phill", "Collins", "England");

myMap['A'] = myPersonOne;

myMap['A'].setNewLocation("New York")

例如,如果您想创建一个Person类的映射,其中包含键的字符,其中人们有名字,姓氏和当前位置,以及setCurrentLocation(std :: string aNewLocation)参数看起来像下面这样。

var
a: String;
b: array [0 .. (section)] of String;
c: Integer;
begin
a:= ('some many ... text of strings');
c:= Length(a);
(some of code)

答案 1 :(得分:0)

  

如果我在以下任何一个方面出错,请更正我,容器用于存储对象

不一定。存在将对象存储到对象的情况是优选的,例如当对象很大时,因此获取对象的副本是昂贵的。另一种情况是对象是多态的,并且您希望在容器中存储不同派生类的对象。存储指针会阻止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一起使用时,您需要小心,考虑到事实,[]只是{{1}的便捷表示法}}。 insert()的结果等同于myMap[k]的结果,其中(∗(myMap.insert(make_pair(k,V{})).first)).second是映射类型。