【问题标题】:Boost: Accessing bimap using operator[]Boost:使用 operator[] 访问 bimap
【发布时间】:2012-12-10 10:44:45
【问题描述】:

在以下代码中:

typedef bimap< set_of< std::string >, list_of< int > > bm_type;
bm_type bm;

bm.left["one"] = 1; // "one" -> 1
bm.left["one"] = 2; // replaced: "one" -> 2
bm.right[2] = "two"; // Compile error

我怎样才能摆脱编译错误?用operator[]不可以访问正确的视图吗?

【问题讨论】:

  • 你希望它做什么?
  • @DavidSchwartz 我正在尝试像使用普通 std::map 一样使用 bimap。我所有的键和值都是独一无二的。我需要能够按值获取/设置键,反之亦然。 (我不确定使用list_of
  • 但是一张地图只有一个给定元素可以去的地方。老实说,我不明白你期望这会做什么。您能否准确描述bm.right[2] 应该做什么?例如,如果列表中没有2,是否应该添加一个?如果是这样,在哪里
  • 正确,因为集合中的条目是不可变的。您需要选择具有您真正想要的语义的集合。
  • @DavidSchwartz 你能告诉我符合我要求的收藏吗?

标签: c++ boost bimap


【解决方案1】:
【解决方案2】:

这段代码没有任何意义。 Lists 没有 operator[],因为如果创建了元素,您必须选择在哪里插入元素。由于列表不是内部排序的(像地图一样),2 可以位于列表的开头、列表的结尾、列表的中间或其他任何位置。

(Boost 的list_of 模仿了标准list 的语义。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-12
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    相关资源
    最近更新 更多