C++ boost::bimap上不支持运算符\u括号\u

C++ boost::bimap上不支持运算符\u括号\u,c++,boost,boost-bimap,C++,Boost,Boost Bimap,我试图在boost::bimap上使用括号运算符,但没有成功 对于我试图解决的问题,我需要满足以下要求的bimap: 左排序,唯一int 右侧非唯一、非排序类型 这导致我为我的bimap选择以下typedef typedef bimap<int, multiset_of<int> > bm; (完整的实时示例和编译器输出可在以下位置找到:) 我尝试了下面的解决方案,但仍然会产生错误 #include <iostream> #include <boo

我试图在
boost::bimap
上使用括号运算符,但没有成功

对于我试图解决的问题,我需要满足以下要求的
bimap

  • 排序,唯一
    int
  • 右侧非唯一、非排序类型
这导致我为我的
bimap
选择以下
typedef

typedef bimap<int, multiset_of<int> > bm;
(完整的实时示例和编译器输出可在以下位置找到:)

我尝试了下面的解决方案,但仍然会产生错误

#include <iostream>
#include <boost/bimap/bimap.hpp>
#include <boost/bimap/multiset_of.hpp>

using namespace std;
using namespace boost::bimaps;

int main()
{
    typedef bimap<int, multiset_of<int> > bm;
    typedef bm::left_map map_type;
    bm mapping;

    map_type& m = mapping.left;

    mapping.insert(bm::value_type(1, 1));
    mapping.insert(bm::value_type(2, 1));
    mapping.insert(bm::value_type(3, 4));

   for (auto it : {1 , 2, 3})
       m[it] = it;

    for (auto it : mapping.left)
        cout << "{ " << it.first << ", " << it.second << " }  ";    

   return 0;
}
#包括
#包括
#包括
使用名称空间std;
使用名称空间boost::bimap;
int main()
{
typedef-bimap-bm;
typedef bm::left_map_type;
bm映射;
map_type&m=mapping.left;
insert(bm::value_type(1,1));
insert(bm::value_type(2,1));
insert(bm::value_type(3,4));
用于(自动it:{1,2,3})
m[it]=it;
用于(自动it:mapping.left)
与往常一样,我们指的是:

set_of和unordered_set_of map views重载运算符[],仅当另一个集合类型是可变的时才检索给定键的关联数据。在这些情况下,它的工作方式与标准的工作方式相同

您在右侧使用的是不可变类型:

因此,您不能使用
运算符[]

错误消息显示如下内容:

OPERATOR_BRACKET_IS_NOT_SUPPORTED

我澄清了我的问题。谢谢你的反馈谢谢,我更新了我的问题。我如何声明bimap,使其右侧是可变的?@Stereo:我列出了可变视图。我建议放弃
操作符[]
的梦想,只对你使用的类型使用支持的API。
#include <iostream>
#include <boost/bimap/bimap.hpp>
#include <boost/bimap/multiset_of.hpp>

using namespace std;
using namespace boost::bimaps;

int main()
{
    typedef bimap<int, multiset_of<int> > bm;
    typedef bm::left_map map_type;
    bm mapping;

    map_type& m = mapping.left;

    mapping.insert(bm::value_type(1, 1));
    mapping.insert(bm::value_type(2, 1));
    mapping.insert(bm::value_type(3, 4));

   for (auto it : {1 , 2, 3})
       m[it] = it;

    for (auto it : mapping.left)
        cout << "{ " << it.first << ", " << it.second << " }  ";    

   return 0;
}
Side collection type       Dereferenced data
--------------------------------------------
set_of                     constant
multiset_of                constant
unordered_set_of           constant
unordered_multiset_of      constant
list_of                    mutable
vector_of                  mutable
unconstrained_set_of       mutable
OPERATOR_BRACKET_IS_NOT_SUPPORTED