在地图中使用矢量时出错

Dil*_*app 2 c++ vector

我试图根据键将矢量添加到地图中的位置.

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;
}
Run Code Online (Sandbox Code Playgroud)

我在这段时间里一直收到以下错误

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>>
Run Code Online (Sandbox Code Playgroud)

程序中的其他所有工作都可以,如果你需要我可以发布它,但唯一的错误是当我尝试使用push_back时.我需要使用push_back,因为我无法重新分配值.我必须保留所有先前的值位于该键,因此push_back是理想的.任何帮助是极大的赞赏.

mar*_*inj 10

代替:

wordMap[word].push_back(context);
Run Code Online (Sandbox Code Playgroud)

你应该追加新的载体:

std::copy(context.begin(), context.end(), std::back_inserter(wordMap[word]));
Run Code Online (Sandbox Code Playgroud)

另一件事是你真的不需要这个初始化:

if (wordMap.find(word) == wordMap.end())
        wordMap.insert(make_pair(word, vector<string>()));
Run Code Online (Sandbox Code Playgroud)

稍后wordMap[word]将添加值初始化元素.

operator[]被要求map实例,然后如果没有值在给定的密钥,一个新的元素总是添加,然后参考返回它.