2012-12-10 23 views
2

在下面的代码:提升:使用访问bimap的operator []的

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[]访问正确的视图?

+0

什么是你希望这个做什么? –

+0

@DavidSchwartz我正在尝试像普通的std :: map一样使用bimap。我所有的键和值都是唯一的。我需要能够通过值获取/设置键,反之亦然。 (并且我不确定使用'list_of') – Meysam

+0

但是一张地图只有一个给定元素可以去的地方。我真的不明白你期望这样做。你能否准确地描述一下'bm.right [2]'应该做什么?例如,如果列表中没有'2',是否应该添加?如果是这样,*哪里*? –

回答

1

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

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