c ++ - 将3个变量值插入到多图中

时间:2016-11-03 20:35:05

标签: c++ dictionary syntax insert multimap

我是地图和多重映射的新手,当我尝试通过使用一对字符串(作为键)将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);
                                                      ^

不确定如何正确插入我想要的值。 :(

3 个答案:

答案 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));