根据我的理解,并纠正我,如果我在以下任何一个错误,容器用于存储对象.. map是一个关联容器,它将对象存储为" elements"。
如果是这样,我如何访问这些对象的成员函数(例如setter和getter),就像我在创建没有map来设置参数的对象时的做法一样?
或以另一种方式,我怎么能做相当于:
someClass someObject;
someObject.setSomething(InputVari);
的地图?
答案 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
是映射类型。