boost::multi_index 多索引容器

 

#include "stdafx.h"
#include <string>
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/composite_key.hpp>
#include <boost/multi_index/ordered_index.hpp>
using namespace std;
using namespace boost;

 

/*
定义一个MutiStruct
key  :    1. objectID
          2. strName

value: 对象指针STNodePtr
*/
struct MutiStruct
{
    int      objectID;//唯一    
    string    strName;//唯一    
                    
    STNodePtr ptrNode;//设备对象指针
};

/*
定义容器,索引
*/
using MutiContainer = boost::multi_index::multi_index_container <
    MutiStruct,
    boost::multi_index::indexed_by <
        boost::multi_index::ordered_unique<boost::multi_index::member<MutiStruct, int, &MutiStruct::objectID>>,
        boost::multi_index::ordered_unique<boost::multi_index::member<MutiStruct, string, &MutiStruct::strName>>
    >
>;

/*
有多少个key,就定义多少个枚举,
0:表示以第一个索引作为key。
1:表示以第二个索引作为key。
*/ enum { KEY_1_VIEW = 0, KEY_2_VIEW = 1 }; using MI_OBJ_IDX = MutiContainer::nth_index<KEY_1_VIEW>::type; using MI_NAME_IDX = MutiContainer::nth_index<KEY_2_VIEW>::type;

 

 

/*插入数据到容器*/
MutiContainer Conter;

MutiStruct mi;
mi.objectID = 11;
mi.strName = "nihao";

std::pair<MutiContainer::iterator, bool> p = Conter.insert(mi);
if (!p.second)
{
     printf("insert fail \n");
}

 

posted @ 2018-10-21 16:35  osbreak  阅读(1423)  评论(0编辑  收藏  举报