boost--容器(简述)

boost容器


  • 01.boost.array
  1. boost.array和C++中STL中的std: :vector一样,都是一样的操作,没有什么不一样的,唯一不同的是array是一个定长的数组
  2. boost.array有一点和C++前面版本不同的是,它是可以向普通数组一样直接进行构造的。(C++11也开始支持了)
//boost.array
int main()
{


    boost::array<int,5> arr;
    arr = {1,2,3,4,5};

    for(auto item : arr)
    {
        std::cout<<item<<" ";
    }

    for(size_t i =0; i < arr.size(); ++i)
    {
        std::cout<<arr[i]<<" ";
    }
    std::cout<<std::endl;
}
  • 02.boost.unordered家族
  1. 这个家族和和C++STL中的unordered基本是一样的,都是基于hash表进行构建的, 所以其key必须是可hash的。
  2. 在C++STL中是没有multi版本的unordered的,但是在boost中是有的。
  3. 对于你一些自定义的类型,可能是不可hash的,但是可以自己定义其hash函数,其标签必须为hash_value()
int main()
{


    boost::unordered_multimap<std::string,int> mul;
    mul.insert(boost::unordered_multimap<std::string,int>::value_type("haha",1));
    mul.insert(boost::unordered_multimap<std::string,int>::value_type("haha",2));
    mul.insert(boost::unordered_multimap<std::string,int>::value_type("haha",3));
    for(auto item:mul)
    {
        std::cout<<item.first<<"  :  "<<item.second<<std::endl; 
    }


    boost::unordered_multimap<std::string,int>::iterator it =mul.begin();
    while(it != mul.end())
    {
        std::cout<<*it.first<<*it.second<<" ";
    }
    std::cout<<std::endl;

  • 03.boost.bimap
  1. 这个是一个全新的东西,在C++11都是没有涉及到的。
  2. 他和是std: :map也很相似,但是它可以通过value进行查找,而std: :map则只能通过key进行查找。
  3. 实现就是两个std: :map,分别是

int main()
{
    boost::bimap<std::string ,int > m;
    m.insert(boost::bimap<std::string,int>::value_type("haha",1));
    m.insert(boost::bimap<std::string,int>::value_type("hehe",2));
    m.insert(boost::bimap<std::string,int>::value_type("xixi",3));

    std::cout<<m.left.count("hehe")<<std::endl;    
    std::cout<<m.right.count(1)<<std::endl;

    boost::bimap<std::string,int>::iterator it =m.begin();
    while(it!=m.end())
    {
        std::cout<<it->left <<" : "<<it->right<<std::endl;
        ++it;
    }


    boost::bimap<std::string ,int>::left_map::iterator lit = m.left.begin();
    while(lit!=m.left.end())
    {

        std::cout<<lit->first<<" : "<<lit->second<<std::endl;
        ++lit;
    }
    lit = m.left.find("haha");
    std::cout<<lit->first<<" : "<<lit->second<<std::endl;
    return 0;
}




参考boost中文文档,如有错误,可以私信我,这里表示感谢!

猜你喜欢

转载自blog.csdn.net/SkinWhite/article/details/81558194