如何填充映射的多图?

时间:2013-04-26 12:44:32

标签: c++ multimap stdmap std-pair

我有以下映射的multimap:

map<int, multimap<int, pair<string, string>>> modCreAlt;

我想在其中插入一行:

int priority = ... ;
string alertInv = ... ;
string upperAlertInv = ... ;

modCreAlt.insert(make_pair(42, make_pair(priority, make_pair(alertInv, upperAlertInv))));

但是我得到以下编译错误:

  

C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ utility(49):
  错误C2664:'std :: multimap&lt; _Kty,_Ty&gt; :: multimap(const std :: less&lt; _Kty&gt;&amp;)':
  无法从'const std :: pair&lt; _Ty1,_Ty2&gt;'转换参数1到'const std :: less&lt; _Ty&gt; &安培;'

----
我还尝试以这种方式插入一行:

modCreAlt.insert(pair<int, multimap<int, pair<string, string>>>(42, make_pair(priority, make_pair(alertInv, upperAlertInv))));

并且:

modCreAlt[42] = make_pair(priority, make_pair(alertInv, upperAlertInv));

分别导致以下两个编译错误:

  

错误C2665:'std :: pair&lt; _Ty1,_Ty2&gt; :: pair':3个重载中没有一个可以转换所有参数类型

并且:

  

错误C2679:binary'=':找不到运算符,该运算符采用'std :: pair&lt; _Ty1,_Ty2&gt;'类型的右手操作数(或者没有可接受的转换)

1 个答案:

答案 0 :(得分:0)

喜欢这样(未经测试)

int priority = ... ;
string alertInv = ... ;
string upperAlertInv = ... ;

modCreAlt[42].insert(make_pair(priority, make_pair(alertInv, upperAlertInv)));

使用[]为您创建一个空的多图(假设在42处不存在)。