【问题标题】:How to populate a mapped multimap?如何填充映射的多图?
【发布时间】:2013-04-26 12:44:32
【问题描述】:

我有以下映射的多图:

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<_kty>::multimap(const std::less<_kty> &)' :
无法将参数 1 从 'const std::pair<_ty1>' 转换为 'const std::less<_ty> &'

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

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

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

error C2665: 'std::pair<_ty1>::pair' : 3 个重载都不能转换所有参数类型

还有:

错误 C2679:二进制“=”:未找到采用“std::pair<_ty1>”类型右侧操作数的运算符(或没有可接受的转换)

【问题讨论】:

  • 您绝不会创建多地图。
  • 正如@john 所说:最外层对的第二个元素必须是multimap,而不是pair

标签: c++ multimap stdmap std-pair


【解决方案1】:

也许像这样(未经测试)

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    相关资源
    最近更新 更多