⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basic.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
/* Boost.MultiIndex basic example. * * Copyright 2003-2008 Joaquin M Lopez Munoz. * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * See http://www.boost.org/libs/multi_index for library home page. */#if !defined(NDEBUG)#define BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING#define BOOST_MULTI_INDEX_ENABLE_SAFE_MODE#endif#include <boost/multi_index_container.hpp>#include <boost/multi_index/member.hpp>#include <boost/multi_index/ordered_index.hpp>#include <algorithm>#include <iostream>#include <iterator>#include <string>using boost::multi_index_container;using namespace boost::multi_index;/* an employee record holds its ID, name and age */struct employee{  int         id;  std::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;  }};/* tags for accessing the corresponding indices of employee_set */struct id{};struct name{};struct age{};/* see Compiler specifics: Use of member_offset for info on * BOOST_MULTI_INDEX_MEMBER *//* Define a multi_index_container of employees with following indices: *   - a unique index sorted by employee::int, *   - a non-unique index sorted by employee::name, *   - a non-unique index sorted by employee::age. */typedef multi_index_container<  employee,  indexed_by<    ordered_unique<      tag<id>,  BOOST_MULTI_INDEX_MEMBER(employee,int,id)>,    ordered_non_unique<      tag<name>,BOOST_MULTI_INDEX_MEMBER(employee,std::string,name)>,    ordered_non_unique<      tag<age>, BOOST_MULTI_INDEX_MEMBER(employee,int,age)> >> employee_set;template<typename Tag,typename MultiIndexContainer>void print_out_by( const MultiIndexContainer& s, Tag* =0 /* fixes a MSVC++ 6.0 bug with implicit template function parms */){  /* obtain a reference to the index tagged by Tag */  const typename boost::multi_index::index<MultiIndexContainer,Tag>::type& i=    get<Tag>(s);  typedef typename MultiIndexContainer::value_type value_type;  /* dump the elements of the index to cout */  std::copy(i.begin(),i.end(),std::ostream_iterator<value_type>(std::cout));}int main(){  employee_set es;  es.insert(employee(0,"Joe",31));  es.insert(employee(1,"Robert",27));  es.insert(employee(2,"John",40));  /* next insertion will fail, as there is an employee with   * the same ID   */  es.insert(employee(2,"Aristotle",2387));  es.insert(employee(3,"Albert",20));  es.insert(employee(4,"John",57));  /* list the employees sorted by ID, name and age */  std::cout<<"by ID"<<std::endl;  print_out_by<id>(es);  std::cout<<std::endl;  std::cout<<"by name"<<std::endl;  print_out_by<name>(es);  std::cout<<std::endl;  std::cout<<"by age"<<std::endl;  print_out_by<age>(es);  std::cout<<std::endl;  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -