我是地图和多重映射的新手,当我尝试通过使用一对字符串(作为键)将3个值插入到多图中时,我遇到了麻烦(编译器错误和警告)和一个int值:
这是我的多图宣告:
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 :(得分:1)
您的密钥是一对(pair<string, string>
),而(words[i], words[i+j])
不是一对。您需要wordpairs.emplace(std::make_pair(words[i], words[i+j]), toInsert)
编辑:有两种方法可以将某些内容放入地图(或多图)中。第一个是插入,它需要一个对象复制到您的地图中。你的地图包含一对&lt;对&LT; string,string&gt;,int&gt;。所以你可以调用像... wordpairs.insert(std::make_pair(std::make_pair(words[i], words[i+j]), toInsert))
这样的插入,或者你可以将它们置于其中。 Emplace将对象构造到位,因此不是使用make_pair
构造它,而是将其复制到地图中,您可以使用给定的调用将其构造到位。
答案 1 :(得分:1)
insert member function只需要一个参数。
wordpairs.insert((words[i], words[i+1]), toInsert);
提供至少两个。它不是有效的语法(我认为,逗号运算符在此上下文中可能有效,也可能无效。)。
插入期望一对,{key,value},你的密钥是一对{words [i],words [i + 1]}结合这产生了统一初始化的魔力:
wordpairs.insert({{words[i], words[i+1]}, toInsert});
这需要C ++ 11。
有关其工作原理的补充说明,请参阅a very popular softwareengineering question.
答案 2 :(得分:0)
您应该使用此wordpairs.insert( make_pair(make_pair(words[i], words[i+1]), toInsert));