gpt4 book ai didi

c++ - 使用派生类的 vector 映射

转载 作者:行者123 更新时间:2023-11-28 02:07:21 25 4
gpt4 key购买 nike

class Base
{
protected:
int x;
public:
Base();
~Base();
virtual void displayx(){
cout << x << endl;
}
};

class Derived:public Base
{
public:
Derived();
~Derived();
void displayx(){
cout << x << endl;
}
};

int main()
{
Base * tanuki;

tanuki = new Derived;

//Unsure about these final lines of code.
std::map< string, vector<Base*>> myMap;

myMap.insert(make_pair("raccoon",vector<....*>()));
}

我希望能够在 myMap 中存储 Derived 的新实例。然后使用来自 map 的指定标识符字符串调用 displayx() 函数。我尝试了多种方法,但我相信我已经碰壁了。

我应该如何将基类“Base”的派生类“Derived”插入到我的 vector 映射中?

最佳答案

给定

std::map< string, vector<Base*>> myMap;

您拥有的是从字符串到 Base* 指针 vector 的映射。因此,您需要查找映射到“racoon”的给定 vector ,然后 push_back 到它。

auto& racoon = myMap["racoon"];  // reference to the vector
racoon.push_back(tanuki);

你也可以写成

myMap["racoon"].push_back(tanuki);

另一种可能性

auto it = myMap.find("racoon");
if (it == myMap.end())
myMap.insert(std::make_pair<std::string, std::vector<Base*>>("racoon", {tanuki}));
else
it->second.push_back(tanuki);

(参见 http://ideone.com/Odgl2y)

--- 编辑 ---

您想调用 displayx,下面是如何在 racoon 的 vector 的所有元素上调用 displayx:

auto it = myMap.find("racoon");
if (it == myMap.end()) {
// it->first is the key, it->second is the value, i.e the vector
for (Base* b : it->second) {
b->displayx();
}
}

--- 编辑 2 ---

在 C++98 中,要插入一个新元素到映射中,您可以这样做:

myMap.insert(std::make_pair<std::string, std::vector<Base*>>("racoon", std::vector<Base*>()));

或者如果你正在使用

typedef std::vector<Base*> Bases;  // or BaseVec or something

你会写

myMap.insert(std::make_pair<std::string, Bases>("racoon", Bases()));

最后一部分是创建一个空 vector 作为第二个参数传递。

关于c++ - 使用派生类的 vector 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36973615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com