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

Posted

技术标签:

【中文标题】如何将字符串添加到 C++ 中无序映射中的字符串向量【英文标题】:How to add a string to a vector of strings in an unordered map in C++ 【发布时间】:2015-05-22 08:21:04 【问题描述】:

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


【问题讨论】:

你的#includes前面的\`是故意的吗? 为什么是指向string 的指针容器? hashtable["car1"].vector&lt;string*&gt;() 应该做什么?这么多问题... 为什么是虚构的语法? hashtable["car1"].vector&lt;string*&gt;()-&gt;insert("change_oil") 毫无意义。不要猜测;阅读手册并遵守规则。 你没有指向向量的指针,你有一个指针向量(指向string 的指针非常奇怪)。 【参考方案1】:

hashtable["car1"] 表示vector,因此您只需在其中添加一些内容,例如hashtable["car1"].push_back(new string("change_oil"))

您需要使用指向string 的指针,这就是我使用new 的原因。字符串文字是(可以转换为)string 而不是string *

如果你想使用insert,你必须使用另一个参数来提供插入的位置。

我建议您不要使用vector&lt;string *&gt;,而是使用vector&lt;string&gt;。在您的情况下,正确管理您的(取消)分配会更加困难

【讨论】:

【参考方案2】:

如何将字符串添加到字符串向量中

不,您的地图不包含字符串向量。它包含一个指向字符串的指针向量。

每个字符串都与一个指向字符串向量的指针相结合

不,它与向量相结合。不是指向一个的指针。

这段代码是否以正确的方式做到这一点?

不,该代码甚至无法编译。

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");

【讨论】:

【参考方案3】:

错误被抛出,因为在你的向量中,项目是string *,而你在行插入的内容:

hashtable["car1"].vector<string*>()->insert("change_oil");

char *(“change_oil”)。

在你的情况下,我认为最好使用vector&lt;string&gt; 而不是vector&lt;string *&gt;

【讨论】:

以上是关于如何将字符串添加到 C++ 中无序映射中的字符串向量的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中的某些位置向字符串添加空格

如何在 C++ 中向字符串中添加字符?

C++中如何将一个字符串(string类型的)映射(转换)到枚举值(enum)

如何迭代无序映射特定键值?

如何在 C++ 中使用无序映射

Swig:如何将 c++ 字符串 const & 类型映射到 python 字符串?