尝试创建一个无序的字符串映射,其中每个字符串都与指向字符串向量的指针耦合。 但是我不能在vector()中添加一个字符串。 得到错误: 无效使用'class std :: vector>'
此代码是否以正确的方式执行此操作?
#include < unordered_map>
#include < string>
#include < vector>
using namespace std;
int main()
{
unordered_map<string, vector<string*> > hashtable;
hashtable.insert(make_pair( "car1", vector<string*>()));
hashtable.insert(make_pair( "car2", vector<string*>()));
hashtable["car1"].vector<string*>()->insert("change_oil");
return 0;
}
答案 0 :(得分:1)
hashtable["car1"]
表示vector
,因此您只需添加一些内容,例如hashtable["car1"].push_back(new string("change_oil"))
。
您需要使用指向string
的指针,这就是我使用new
的原因。字符串litteral(可以转换为)string
而不是string *
。
如果你想使用insert
,你必须使用另一个参数来提供插入的位置。
我建议您不要使用vector<string *>
而是使用vector<string>
。在您的情况下,正确管理(de)分配
答案 1 :(得分:1)
如何将字符串添加到字符串向量
不,您的地图不包含字符串向量。它包含一个指向字符串的指针向量。
其中每个字符串都与指向字符串向量
的指针耦合
不,它与矢量耦合。不是指向一个的指针。
此代码是否以正确的方式执行此操作?
不,该代码甚至无法编译。
hashtable["car1"].vector<string*>()
c ++中没有这样的语法。
->insert("change_oil")
您的向量包含指向std::string
个对象的指针。您无法使用字符串文字初始化此类指针。此外,vector::insert
期望迭代器到您要插入的位置,但未提供该位置。
现在提出问题......
如何将字符串添加到无序地图中的字符串向量
这很简单。首先将字符串的无序映射定义为字符串向量。
unordered_map<string, vector<string> > hashtable;
地图的operator[]
将返回对向量的引用。如果该元素不存在,则会添加该元素,因此您的插入是多余的(但如果您更清楚,则可以保留它)。在返回的引用上调用push_back
以向向量添加字符串。
hashtable["car1"].push_back("change_oil");
答案 2 :(得分:0)
错误被抛出,因为在向量中,项目为string *
,而您在行中插入的内容为:
hashtable["car1"].vector<string*>()->insert("change_oil");
是char *
(“change_oil”)。
在您的情况下,我认为最好使用vector<string>
而不是vector<string *>
。