multi_index_container

匿名 (未验证) 提交于 2019-12-02 22:56:40

转自:https://blog.csdn.net/buptman1/article/details/38657807

multi_index_container:

Boost Multi-index Containers Library定义了multi_index_container模板类,可以从不同的维度建索引、排序和存取。

 

 

如上图,容器multi_index_container分别从shape,number和sequenced(默认插入的顺序)三个维度对元素进行管理。

 

#include <string> #include <iostream> #include <boost/multi_index_container.hpp> #include <boost/multi_index/member.hpp> #include <boost/multi_index/ordered_index.hpp>  using namespace boost; using namespace boost::multi_index; using namespace std; struct Employee{   int id;   string name;   int age;    Employee(int id_,std::string name_,int age_):id(id_),name(name_),age(age_){}    friend std::ostream& operator<<(std::ostream& os,const Employee& e)   {     os<<e.id<<" "<<e.name<<" "<<e.age<<std::endl;     return os;   } };  typedef multi_index_container<   Employee,   indexed_by<     ordered_unique<member<Employee, int, &Employee::id> >,     ordered_non_unique<member<Employee, string, &Employee::name> >,     ordered_non_unique<member<Employee, int, &Employee::age> >   > > EmployeeContainer;  typedef EmployeeContainer::nth_index<0>::type IdIndex; typedef EmployeeContainer::nth_index<1>::type NameIndex; typedef EmployeeContainer::nth_index<2>::type AgeIndex;  int main(){   EmployeeContainer con;   con.insert(Employee(0,"Joe",31));   con.insert(Employee(1,"Robert",27));   con.insert(Employee(2,"John",40));    IdIndex& ids = con.get<0>();   copy(ids.begin(),ids.end(), ostream_iterator<Employee>(cout));   cout << endl;    NameIndex& names = con.get<1>();   copy(names.begin(), names.end(), ostream_iterator<Employee>(cout));   cout << endl;    names.erase(names.begin());    AgeIndex& ages = con.get<2>();   copy(ages.begin(), ages.end(), ostream_iterator<Employee>(cout));   cout << endl;    return 0; }
#include "boost/multi_index_container.hpp" #include "boost/multi_index/member.hpp" #include "boost/multi_index/ordered_index.hpp"  using boost::multi_index_container; using namespace boost::multi_index;  struct stu_num{};	// 索引-学号 struct stu_name{};  // 索引-姓名 struct stu_age{};	// 索引-年龄  typedef boost::multi_index_container< 	Student, 	indexed_by< 		ordered_unique<                   // 学号是唯一值的索引 		tag<stu_num>,  BOOST_MULTI_INDEX_MEMBER(Student,unsigned int,stu_num)>,     		// 姓名是非唯一值的索引                      ordered_non_unique< 		tag<stu_name>,BOOST_MULTI_INDEX_MEMBER(Student,std::string,stu_name)>,                   // 年龄是非唯一值的索引 		ordered_non_unique< 		tag<stu_age>, BOOST_MULTI_INDEX_MEMBER(Student,unsigned int,stu_age)>	 	> > StudentContainer;

	// 用名字作为索引 	StudentContainer::index<stu_name>::type& indexOfName = studentsets.get<stu_name>();  	// 查找名叫李四的人 	StudentContainer::index<stu_name>::type::iterator it = indexOfName.find("李四");  	// 找到了? 	if( it != indexOfName.end() ) 	{                // it就是一个Student序列的迭代器,现在你可以                  // 像普通迭代器一样操作它了,比如cout << *it 	}


	// 用名字作为索引 	StudentContainer::index<stu_name>::type& indexOfName = studentsets.get<stu_name>();   	// 查找名叫张三的人的下界 	StudentContainer::index<stu_name>::type::iterator itL = indexOfName.lower_bound("张三");  	// 查找名叫张三的人的上界 	StudentContainer::index<stu_name>::type::iterator itU = indexOfName.upper_bound("张三");           // 遍历输出所有名叫“张三”的学生信息 	while(itL != itU) 	{ 		std::cout << *itL; 		++itL; 	}
 
 
相关文章
  • 1. 
  • 2. 
  • 3. 
  • 4. 
  • 5. 
  • 6. 
  • 7. 
  • 8. 
  • 9. 
  • 10. 

multi_index_container

原文:https://www.cnblogs.com/lehoho/p/9374624.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!