boost容器
- 01.boost.array
- boost.array和C++中STL中的std: :vector一样,都是一样的操作,没有什么不一样的,唯一不同的是array是一个定长的数组
- 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家族
- 这个家族和和C++STL中的unordered基本是一样的,都是基于hash表进行构建的, 所以其key必须是可hash的。
- 在C++STL中也是有multi版本的unordered的。
- 对于你一些自定义的类型,可能是不可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
- 这个是一个全新的东西,在C++11都是没有涉及到的。
- 他和是std: :map也很相似,但是它可以通过value进行查找,而std: :map则只能通过key进行查找。
- 实现就是两个std: :map,分别是<key , value>和<value, key>
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中文文档,如有错误,可以私信我,这里表示感谢!