C++标准提供了map和multi_map,把key映射到value;
但是这种映射是单向的,只能是key到value,不能反过来;
boost.bimap扩展了标准库映射型容器,提供双向映射能力,功能强大;
bimap提供的映射关系有两个视图:左视图和右视图;
更多详细用法请参考《Boost程序库完全开发指南》
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
/* boost_bimap.cpp
C++标准提供了map和multi_map,把key映射到value; 但是这种映射是单向的,只能是key到value,不能反过来; boost.bimap扩展了标准库映射型容器,提供双向映射能力,功能强大; bimap提供的映射关系有两个视图:左视图和右视图; 更多详细用法请参考《Boost程序库完全开发指南》 */ #include <iostream> #include <string> #include <vector> #include <cassert> #include <boost/bimap.hpp> #include <boost/typeof/typeof.hpp> using namespace std; using namespace boost; template<class T> void print_map(T &m) { for (BOOST_AUTO(pos, m.begin()); pos!=m.end(); ++pos) { cout << pos->first << "--------" << pos->second << endl; } } int main(void) { bimap<int, string> bm; bm.left.insert(make_pair(1, "Zhang")); bm.left.insert(make_pair(2, "Wang")); for(BOOST_AUTO(pos, bm.left.begin()); pos != bm.left.end(); ++pos) { cout << "Left[" << pos->first << "]=" << pos->second << endl; } bm.right.insert(make_pair("Li", 23)); bm.right.insert(make_pair("Sun", 24)); for(BOOST_AUTO(pos, bm.left.begin()); pos != bm.left.end(); ++pos) { cout << "Right[" << pos->first << "]=" << pos->second << endl; } print_map(bm.left); print_map(bm.right); cin.get(); return 0; } |