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

c++ - Inserting 3 variable values into a multimap

我是地图和多重映射的新手,在尝试通过使用一对字符串(充当键)和一个整数值:

这是我的多图声明:

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);
                                                      ^

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

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

编辑:有两种方法可以将某些东西放入地图(或多地图)中。第一个是插入,它需要一个对象复制到您的地图中。您的地图包含一对 < pair< string,string >, int >。所以你可以像... wordpairs.insert(std::make_pair(std::make_pair(words[i], words[i+j]), toInsert)) 一样调用插入,或者你可以放置它们。 Emplace 就地构造对象,因此无需使用 make_pair 构造它然后将其复制到地图中,您只需使用给定的调用就地构造它。

你应该使用这个wordpairs.insert( make_pair(make_pair(words[i], words[i+1]), toInsert));

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.

中找到有关此作品为何有效的其他阅读材料