Boost.Bimap 是一个C++的双向 map 库。使用 Boost.Bimap,你可以创建两个类型都可用作键值的关联容器。 记住,
boost::bimap - 双向映射 定义一个 bimap : #include bimap bm; 它有3个不同的视图: bm.left : 是一个兼容于 std::map 类型的东西. bm.right: 是一个兼容于 std:::map 类型的东西. bm 是一个兼容于 std::set< relation 类型的东西. 例如我们有一个输出map的函数如下: [cpp] view plaincopy
它的参数可以接受一个 std::map 对象. 所以它也可以接受如下调用: print_map( bm.left ); print_map( bm.right ); 下边我们定义一个整数和字符串的双向映射: typedef boost::bimap< int, std::string > bm_type; bm_type bm; 向其插入数据: bm.insert( bm_type::value_type(1, "one" ) ); bm.insert( bm_type::value_type(2, "two" ) ); 输出刚才插入的数据: [cpp] view plaincopy
[cpp] view plaincopy
bm_type::left_const_iterator left_iter = bm.left.find(2); assert( left_iter->second == "two" ); // 再通过左视图向 bm 插入数据 // 它和直接用 bm.insert( bm_type::value_type(3,"three") ); 效果一样 bm.left.insert( bm_type::left_value_type( 3, "three" ) ); 同样的. 我们可以使用它的 right视图 : // 通过 string 查找 bm_type::right_const_iterator right_iter = bm.right.find("two"); assert( right_iter->second == 2 ); // 调用 at() assert( bm.right.at("one") == 1 ); // 删除 "two" 对应的关系 bm.right.erase("two"); 最后. 缺省时在 std::map 中. 我们插入 ("1", 1) 后再插入 ("one", 1) 是可以的. 但这在bimap中不行. 因为它左右两个都可以做键值. 要求它们两者都必须是唯一的. 但这只是它缺省时的样子. bimap可以通过模板参数来定制它一些特征: 例如可以指定是否需要 一对多 的映射关系: 可以一个 x 对应多个 y. 可以多个 x 对应一个 y. 也可以多个 x 对应多个 y. 还可以指定是否要求 left视图 或 right视图 或 两者 有序. 如果不要求有序的话. 它可以用 hash表来实现底层.
来源:http://www.cnblogs.com/kex1n/archive/2010/03/25/2286505.html |
|
来自: wtkc > 《container》