unordered_multimap元素插入

时间:2011-07-21 18:57:04

标签: c++ boost map

我尝试使用以下代码将值插入boost unordered_multimap,但由于它没有编译,因此无效。为什么没有access []运算符?

insert()方法也不起作用?

#include <iostream>
#include <boost/unordered_map.hpp>

using namespace std;

int main()
{
   typedef boost::unordered_multimap<
      int,
      boost::unordered_multimap<
         int,
         boost::unordered_multimap<int, int>
      >
   > unordered_map;

   unordered_map _3d;

   _3d[0][0][0] = 10;
   _3d[0][0][0].insert(10);

   cout << _3d[0][0][0] << endl;
}

错误:

  

multimap.cpp ||在函数'int main()'中:
  multimap.cpp | 19 |错误:'operator[]'中的'_3d[0]'不匹配   multimap.cpp | 21 |错误:'operator[]'中的'_3d[0]'不匹配   || ===构建完成:2个错误,0个警告===

2 个答案:

答案 0 :(得分:7)

unordered_multimapmultimap都不支持operator[],因为它没有明确定义它的含义。 operator[]背后的想法是,您可以将myMap[key]写为“key中与myMap相关联的唯一值。”处理unordered_multimap时,这在数学上没有明确定义;在multimap中可以有许多具有相同键的键值对,并且不清楚您希望具有哪个特定值。

从您提供的示例中,您似乎确实希望拥有标准unordered_map而不是unordered_multimap。如果您尝试使用地图映射的地图来表示某些更高维的数组,那么您可能只希望将每个坐标映射到一个特定的子空间。用unordered_multimap替换unordered_map应该可以解决这个问题。

希望这有帮助!

答案 1 :(得分:0)

boost::unordered_map doesn't appear to have operator[]。请改用查找函数。

您使用的是什么参考?