2016-11-03 58 views
1

我不熟悉map和multimaps的使用,並且在嘗試通過使用a圖插入3個值到multimap時遇到問題(編譯器錯誤和警告)對字符串(作爲鍵)和一個int值:C++ - 將3個變量值插入到多圖中

這是我的多重映射聲明:

multimap<pair<string, string>, int> wordpairs; 

這是我正在努力填充多重映射:

int toInsert = 0; 

    for (int i = 0; i < s; i++) { 

    wordpairs.insert((words[i], words[i+1]), toInsert); 

    } 

其中的詞是:

vector<string> words 

我得到這個錯誤和一堆警告:

error: no matching function for call to ‘std::multimap<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >, int>::insert(std::__cxx11::basic_string<char>&, int&)’ 
    wordpairs.insert((words[i], words[i+1]), toInsert); 
                ^

不知道如何正確地插入我想要的值。 :(

回答

0

您應該使用這個wordpairs.insert(make_pair(make_pair(words[i], words[i+1]), toInsert));

+0

這工作!謝謝!:D – RockAndaHardPlace

+0

在這種情況下,emplace更有意義 – RyanP

+0

雖然它需要C++ 11:'wordpairs, emplace(std :: make_pair(words [i],words [i + 1]),toInsert);' – Xirema

1

您的密鑰是一對(pair<string, string>)和(words[i], words[i+j])是不是對你需要wordpairs.emplace(std::make_pair(words[i], words[i+j]), toInsert)

編輯:有把東西放到一個地圖(或多重映射)兩種方式,第一是。插入它需要一個對象複製到你的地圖。你的地圖包含一對<對< string,string>,int>。所以你可以調用插入像... wordpairs.insert(std::make_pair(std::make_pair(words[i], words[i+j]), toInsert))或者你可以emplace它們。Emplace構造對象所以不要用make_pair構建它,然後將其複製到地圖中,您可以將其構造成與給定的調用位置相同。

+0

發現我試過了,我仍然得到同樣的錯誤。 :( – RockAndaHardPlace

+0

我的錯誤,我將編輯 – RyanP

1

insert member function只需要一個參數。

wordpairs.insert((words[i], words[i+1]), toInsert); 

提供了至少兩個。這不是有效的語法(我認爲,在這種情況下,逗號運算符可能有效也可能不會有效)。

插入期待一對,{鍵,值},您的鍵是一對{字[I]中,詞語第[i + 1]}合併這產生了具有均勻的初始化的魔:

wordpairs.insert({{words[i], words[i+1]}, toInsert}); 

這需要C++ 11。

補充閱讀,爲什麼這部作品在a very popular softwareengineering question.