如何将字符串添加到 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;
【问题讨论】:
你的#include
s前面的\`
是故意的吗?
为什么是指向string
的指针容器? hashtable["car1"].vector<string*>()
应该做什么?这么多问题...
为什么是虚构的语法? hashtable["car1"].vector<string*>()->insert("change_oil")
毫无意义。不要猜测;阅读手册并遵守规则。
你没有指向向量的指针,你有一个指针向量(指向string
的指针非常奇怪)。
【参考方案1】:
hashtable["car1"]
表示vector
,因此您只需在其中添加一些内容,例如hashtable["car1"].push_back(new string("change_oil"))
。
您需要使用指向string
的指针,这就是我使用new
的原因。字符串文字是(可以转换为)string
而不是string *
。
如果你想使用insert
,你必须使用另一个参数来提供插入的位置。
我建议您不要使用vector<string *>
,而是使用vector<string>
。在您的情况下,正确管理您的(取消)分配会更加困难
【讨论】:
【参考方案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<string>
而不是vector<string *>
。
【讨论】:
以上是关于如何将字符串添加到 C++ 中无序映射中的字符串向量的主要内容,如果未能解决你的问题,请参考以下文章