如何在C ++中的无序映射中将字符串添加到字符串向量中

时间:2015-05-22 08:21:04

标签: c++ string vector unordered-map

尝试创建一个无序的字符串映射,其中每个字符串都与指向字符串向量的指针耦合。 但是我不能在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;

}

3 个答案:

答案 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 *>