boost multi_index简单了解
#include <string>
#include <iostream>
#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>
using namespace boost;
using namespace boost::multi_index;
using namespace std;
struct Employee{
int id;
string name;
int age;
Employee():id(0),age(0){}
Employee(int id_,string name_,int age_):id(id_),name(name_),age(age_){}
friend ostream& operator<<(ostream& os,const Employee& e)
{
os<<e.id<<"\t"<<e.name<<"\t"<<e.age<<endl;
return os;
}
int get_id()const { return id; }
const std::string& get_name()const { return name; }
int get_age()const { return age; }
};
inline int get_student_age(const Employee &emp)
{
return emp.age;
}
class ModifyEmployee
{
public:
ModifyEmployee(int id_,string name_,int age_):id(id_),name(name_),age(age_){}
void operator()(Employee &emp)
{
emp.id = id;
emp.name = name;
emp.age = age;
}
private:
int id;
string name;
int age;
};
struct emp_id{};
struct emp_name{};
struct emp_age{};
struct emp_name_age{};
typedef multi_index_container<
Employee,
indexed_by<
ordered_non_unique< tag<emp_name_age>,
composite_key<
Employee,
member<Employee, string, &Employee::name>,
member<Employee, int, &Employee::age> > >,
ordered_unique< tag<emp_id>, member<Employee, int, &Employee::id> >,
ordered_non_unique< tag<emp_name>, member<Employee, string, &Employee::name> >,
ordered_non_unique< tag<emp_age>, member<Employee, int, &Employee::age> >
>
> EmployeeContainer;
//模板函数,用法: print_out_by<tagname>(multi_index_container_instance)
template <typename Tag, typename MultiIndexContainer>
void print_out_by(const MultiIndexContainer &s)
{
/* 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(){
EmployeeContainer employee;
employee.insert(Employee(1,"罗一",21));
employee.insert(Employee(2,"周二",18));
employee.get<emp_id>().insert(Employee(6,"郑六",21));
employee.insert(Employee(7,"黄七",20));
employee.insert(Employee(3,"张三",19));
employee.insert(Employee(4,"李四",28));
employee.insert(Employee(5,"李四",23));
employee.insert(Employee(8,"王八",19));
employee.insert(Employee(10,"杨十",22));
//1 打印相关信息
std::cout<<"Employee by ID"<<std::endl;
print_out_by<emp_id>(employee);
std::cout<<std::endl;
std::cout<<"Employee by Name"<<std::endl;
print_out_by<emp_name>(employee);
std::cout<<std::endl;
std::cout<<"Employee by Age"<<std::endl;
print_out_by<emp_age>(employee);
std::cout<<std::endl;
std::cout <<"Employee by name&age" << std::endl;
print_out_by<emp_name_age>(employee);
return 0;
}
boost multi_index简单了解的更多相关文章
- boost multi_index
/** boost 多索引容器的一般使用 这里使用google 的gmock 库来验证对boost 多索引模板的使用,并验证. 这里是手敲的,可能会有一些字符敲错的情况,编译错误的放,修改一下,同时链 ...
- 使用boost::multi_index高速构建排行榜
使用boost::multi_index高速构建排行榜 前几天在boost的maillist上看到boost::multi_index将要支持ranked_index(邮件内容见附件2),这实乃我等苦 ...
- 用 boost::multi_index 管理玩家
用 boost::multi_index 管理玩家(金庆的专栏)网游服务器上的玩家集合需要多种索引:如用ID查找,角色名查找, 用登录时分配的会话ID查找.用boost::multi_index进行玩 ...
- boost::multi_index 多索引容器
#include "stdafx.h" #include <string> #include <boost/multi_index_container.hpp&g ...
- boost::multi_index 提供一种千人在线即时排行榜的设计思路
原文地址: http://www.limerence2017.com/2019/06/23/cpp01/ 做游戏或金融后台开发,经常会遇到设计开发排行榜的需求.比如玩家的充值排行,战力排行等等.而这种 ...
- boost multi_index 插入返回值
boost multi_index 对象插入函数emplace() 的返回值,是一个std::pair<iterator, bool>该pair 的first 是一个插入成功的位置,第二个 ...
- 跨平台c++/boost/asio 简单的HTTP POST请求 客户端模型
作为一个呼应,写一个c++版本的同步http post客户端功能,如果你需要纯C版本,移步这里 linux下纯C简单的HTTP POST请求 客户端模型 讲解一下基本的的http post协议 通过\ ...
- 使用 boost.asio 简单实现 异步Socket 通信
客户端: class IPCClient { public: IPCClient(); ~IPCClient(); bool run(); private: bool connect(); bool ...
- boost asio 异步实现tcp通讯
---恢复内容开始--- asioboost 目录(?)[-] 一前言 二实现思路 通讯包数据结构 连接对象 连接管理器 服务器端的实现 对象串行化 一.前言 boost asio可算是一个简 ...
随机推荐
- Antd 表格内通过rowClassName实现隔行变色的显示方法(转载)
ant design中 table组件很方便,在项目中遇到了需要实现奇偶行颜色不同以方便阅读的功能,主要用到了rowClassName这一api,通过判断index的奇偶来实现不同的样式分配. row ...
- 【Weiss】【第03章】练习3.15:自调整链表
[练习3.15] a.写出自调整表的数组实现.自调整表如同一个规则的表,但是所有的插入都在表头进行. 当一个元素被Find访问时,它就被移到表头而并不改变其余的项的相对顺序. b.写出自调整表的链表实 ...
- Spring bean配置 入门
Spring 的入门案例:(IOC) IOC 的底层实现原理(结构图2.01) 图:2.01 IOC:Inversion of Control 控制反转,指的是对象的创建权反转(交给)给Spring ...
- HTTP2.0学习 与 Nginx和Tomcat配置HTTP2.0
目录 一.HTTP2.0 1.1 简介 1.2 新的特性 1.3 h2c 的支持度 二.Nginx 对 http2.0 的支持 2.1 Nginx 作为服务端使用http2.0 2.2 Nginx 作 ...
- c# 对SOAP返回XML字符串的解析方法
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP:Head ...
- [单调栈]小A的柱状图
链接:https://ac.nowcoder.com/acm/problem/23619来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- java基于Hash表和双向链表简单实现LRU Cache
package lru; import java.util.HashMap; public class LRUCache2<K,V> { public final int capacity ...
- python之装饰器的进阶
一.带参数的装饰器 (必须会) 针对不同的app的验证,比如:天猫和天猫超市,京东商城和京东超市 def wrapper_out(n): print(n) def wrapper(f): def in ...
- TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人。
简介 TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人. 文章包括一下几个部分: 1.为什么要尝试做这个项目? 2.为 ...
- 纯干货 C# 通过 RFC_READ_TABLE 读取 SAP TABLE
SAP系统又称企业管理解决方案,是全球企业管理软件与解决方案的技术领袖,同时也是市场领导者.通过其应用软件.服务与支持,SAP持续不断向全球各行业企业提供全面的企业级管理软件解决方案. 在实际开发过程 ...