[英]Error when using vectors in a map
我试图根据键将矢量添加到地图中的位置。
vector<string> words;
map<string, vector<string>> wordMap;
for (int i = 0; i < words.size(); i++) {
string word = words.at(i);
if (wordMap.find(word) == wordMap.end())
wordMap.insert(make_pair(word, vector<string>()));
vector<string> context = { "EMPTY" };
if (i == 0)
context = { "Beginning of words", words[i + 1], words[i + 2] };
else if(i == 1)
context = { "Beginning of words", words[i - 1], words[i + 1], words[i + 2] };
else if (i == words.size() - 2)
context = { words[i - 2], words[i - 1], words[i + 1], "End of words" };
else if(i == words.size() - 1)
context = { words[i - 2], words[i - 1], "End of words" };
else
context = { words[i - 2], words[i - 1], words[i + 1], words[i + 2] };
wordMap[word].push_back(context);
cout << context[0] << endl;
}
我在这段时间里一直收到以下错误
wordMap[word].push_back(context);
Error: no instance of overloaded function "std::vector<_Ty,_Alloc>::push_back[with_Ty=std::string,_Alloc=std::allocator<std::string>]" matches the argument list
argument types are: (std::vector<std::string, std::allocator<std::string>>)
object type is std::vector<std::string, std::allocator<std::string>>
程序中的其他所有内容都可以正常运行,如果您需要我可以发布它,但唯一的错误是当我尝试使用push_back时。 我需要使用push_back,因为我无法重新分配值。 我必须保留所有先前的值位于该键,因此push_back是理想的。 任何帮助是极大的赞赏。
代替:
wordMap[word].push_back(context);
你应该追加新的载体:
std::copy(context.begin(), context.end(), std::back_inserter(wordMap[word]));
另一件事是你真的不需要这个初始化:
if (wordMap.find(word) == wordMap.end())
wordMap.insert(make_pair(word, vector<string>()));
稍后在wordMap[word]
会添加值初始化元素。
当在map
实例上调用operator[]
如果给定键上没有值,则总是添加一个新元素,然后返回对它的引用。
编辑:问题发生是因为wordMap[word]
的类型为vector<string>
并且调用push_back
是正确的,但你需要提供一个类型为string的值为push_back,但这里是wordMap[word].push_back(context);
, context
的类型是vector<string>
。
也许变化是这样的:
for(vector<string>::iterator iter = context.begin(); iter != context.end(); iter++) {
wordMap[word].push_back(*iter);
}
此外,我会使用指针,因为可能更好地存储指向堆中的字符串向量而不是堆栈ex中的指针:
map<string, vector<string>*> wordMap;
...
vector<string>* context = new vector<string>();
...
wordMap[word] = context;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.