笔记:boost:: multi_index_container

boost::multi_index_container 作用:创建一种提供索引的数据结构,快速查询。

ordered_unique,索引。唯一值

composite_key, 排序的key,

composite_key_comare,排序方式,传入自定义排序方法。

#include <iostream>
#include <string>
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/composite_key.hpp>


#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_comparison.hpp>

struct Operation_type{
    int time;
    friend  bool operator < (const Operation_type &op1, const Operation_type &op2){
        return op1.time < op2.time;
    }
};

typedef struct  {
    std::string name;
    unsigned int age;
    unsigned int heigth;
    unsigned int num;
    Operation_type op;
}student;

//自定义排序
struct CmpByKeyLength {
    bool operator()(const Operation_type& k1, const Operation_type& k2) const {
        return k1.time < k2.time;
    }
};


struct by_num{};
struct by_name{};
struct by_age{};
struct by_stu_op_time{};

using namespace boost::multi_index;

typedef
boost::multi_index_container<
        student,
        indexed_by<
                //ordered_unique, 索引,唯一
                ordered_unique<tag< by_num >,
                        composite_key<student, member<student, Operation_type, &student::op>>,
                        composite_key_compare<CmpByKeyLength> >,
                ordered_non_unique<tag< by_age >, member<student, unsigned int, &student::age>>,
                ordered_non_unique<tag< by_name >, member<student, std::string, &student::name>>,
                ordered_non_unique<tag< by_stu_op_time >, member<student, Operation_type, &student::op>>
        >
> StuContainer;


void insert(StuContainer &con){
    student st1 = {"alice", 18, 170, 1, {1}};
    student st2 = {"alice", 19, 170, 2, {2}};
    student st3 = {"boy", 20, 171, 3, {3}};
    student st4 = {"bush", 21, 171, 4, {5}};
    student st5 = {"gay", 22, 172, 5, {10}};
    student st6 = {"send", 23, 174, 7, {11}};

    con.insert(st2);
    con.insert(st3);
    con.insert(st6);
    con.insert(st1);
    con.insert(st4);
    con.insert(st5);


}


int main() {
    StuContainer con;
    insert(con);

    StuContainer::index<by_num>::type &indexofName = con.get<by_num>();
    auto itr = indexofName.begin();
    auto end = indexofName.end();
    while(itr != end){
        std::cout << itr->op.time << std::endl;
        itr++;
    }

    std::cout << "Hello, World!" << std::endl;
    return 0;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值