`

multi_index_container

 
阅读更多
根据不同的类中不同的字段排序

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

using namespace boost;
using namespace std;

struct Student
{
    Student(int i,string n,int a)
    {
        id = i;
        name = n;
        age = a;
    }
    friend std::ostream& operator<<(std::ostream& os,const Student& a)
    {
        os << "id:" << a.id << ",name:" << a.name << ",age:"<<a.age << std::endl;
        return os;
    }
    int id;
    string name;
    int age;
};

typedef boost::multi_index_container<Student,boost::multi_index::indexed_by<
        boost::multi_index::ordered_unique<boost::multi_index::member<Student,int,&Student::id>>,//id唯一
        boost::multi_index::ordered_unique<boost::multi_index::member<Student,string,&Student::name>>,
        boost::multi_index::ordered_non_unique<boost::multi_index::member<Student,int,&Student::age>>//age允许不唯一
        >
        > StudentContainer;

typedef StudentContainer::nth_index<0>::type IdIndex;
typedef StudentContainer::nth_index<1>::type NameIndex;
typedef StudentContainer::nth_index<2>::type AgeIndex;

int main()
{
    StudentContainer sc;
    sc.insert(Student(1,"zhangsan",20));
    sc.insert(Student(3,"lisi",22));
    sc.insert(Student(2,"wangwu",21));
    sc.insert(Student(4,"zhaoliu",22));

    IdIndex& sortById = sc.get<0>();
    NameIndex& sortByName = sc.get<1>();
    AgeIndex& sortByAge = sc.get<2>();

    cout << "sort by id:" << endl;
    copy(sortById.begin(),sortById.end(), ostream_iterator<Student>(cout));

    cout << "sort by name:" << endl;
    copy(sortByName.begin(),sortByName.end(), ostream_iterator<Student>(cout));

    cout << "sort by age:" << endl;
    copy(sortByAge.begin(),sortByAge.end(), ostream_iterator<Student>(cout));

}


sort by id:
id:1,name:zhangsan,age:20
id:2,name:wangwu,age:21
id:3,name:lisi,age:22
id:4,name:zhaoliu,age:22
sort by name:
id:3,name:lisi,age:22
id:2,name:wangwu,age:21
id:1,name:zhangsan,age:20
id:4,name:zhaoliu,age:22
sort by age:
id:1,name:zhangsan,age:20
id:2,name:wangwu,age:21
id:3,name:lisi,age:22
id:4,name:zhaoliu,age:22


account_object.hpp 320,371
分享到:
评论

相关推荐

    BoostMutilIndexContainer.rar

    1. **boost::multi_index_container**:这是多索引容器的基本类,它提供了对多个索引的管理和数据存储。你可以通过添加不同类型的索引来定义不同的访问方式。 2. **索引类型**:Boost库提供了多种预定义的索引类型...

    敏感词过滤

    BOOST multi_index_container Performance test condition: 1. Giving a sentence around 100 bytes (English & Chinese mixed) 2. Dirty phrases around 10,000 3. Do 1,000 loop test 4. Intel I7 ...

    boost库开发文档

    Boost库在许多方面扩展了STL,提供了更高级的数据结构(如multi_index_container)和算法(如graph和property_map),以及如智能指针、正则表达式、线程支持等实用工具。 在Boost库中,一些重要的知识点包括: 1. ...

    boost-STL.rar_Boost_C++标准库_STL_c 标准库_chm

    1. **非标准容器**:例如multi_index_container,它允许在一个容器中实现多种索引方式,使得数据访问更为灵活。 2. **特殊迭代器**:如counting_iterator,它可以生成一个从特定值开始递增的迭代器序列,方便进行...

    boost_regex_only_1_34_0.rar

    multi_index_container.hpp是Boost.MultiIndex库的一部分,它提供了多索引容器,可以使用多种方式访问和组织数据。在处理大量匹配结果时,这种容器可以提供更高效的数据管理和检索。 concept_archetype.hpp和...

    boost_1_76_0-编译好的库和头文件

    3. **数据结构**:Boost库提供了如`multi_index_container`、`flat_map`和`bimap`等高级数据结构,这些结构在某些场景下比标准库中的`std::map`和`std::set`更加高效或功能更强大。 4. **线程管理**:Boost.Thread...

    BOOST应用初探.pdf

    - 多索引容器如`multi_index_container`提供了更灵活的数据结构。 - 哈希容器扩展了标准库的`std::unordered_map`和`std::unordered_set`。 - `bimap`提供了双端映射的容器。 - 日志库提供了灵活的日志记录机制。 - ...

    Beyond the C++Standard Library(boost中文版)

    - **功能简介**:除了标准库提供的容器之外,Boost库还提供了一系列更加灵活的容器类,例如`array`、`multi_index_container`等,以及相关的迭代器和算法。 - **应用场景**:在需要处理复杂数据结构或标准库容器无法...

    boost中文文档

    2. **容器与算法**:Boost提供了如`multi_index_container`这样的高级容器,以及`foreach`循环宏,它们扩展了C++标准库的功能,使代码更加简洁和高效。 3. **函数对象和元编程**:Boost库包含了一系列函数对象...

    超越C++标准Boost库 CHM版

    4. **数据结构**:如`multi_index_container`提供了多种索引方式的容器,`flat_map`则提供了一个扁平化的映射结构,提高了查找速度。 5. **模板元编程**:如`mpl`库,允许在编译时进行计算和类型操作,大大增强了...

    boost程序库完全开发指南深入c++准标准库第3版-第5章

    3. **容器扩展**:Boost库还提供了多种容器扩展,例如`multi_index_container`,它允许多种索引方式访问同一数据集,提高了数据结构的灵活性。此外,`flat_map`和`flat_set`提供了一种扁平化的实现,相比于标准库中...

    Beyond the C++ Standard Library 中文版 超越c++标准库

    5. **容器与算法**:Boost库还包含了多种高级容器,如multi_index_container,以及一些扩展的算法,如icl(Interval Container Library)提供区间操作的容器和算法。 6. **数学与数值计算**:Boost.Math库提供了...

    C++参考手册中文版chm以及Boost库中文版chm

    2. **容器和算法**:例如multi_index_container提供多种索引方式访问元素,而foreach则简化了循环遍历容器。 3. **函数工具**:包括函数对象、函数适配器和函数对象工厂,用于编写更简洁的代码。 4. **并发与多...

    超越c++标准库boost程序库导论.rar

    4. **容器和算法**:Boost库扩展了C++标准库的容器,如`multi_index_container`提供了多重索引的数据结构。同时,`fusion`库提供了一种将不同数据结构融合在一起的方法。`algorithm`库则包含了许多高级的算法,如...

    Effective STL

    8. STL的扩展:除了标准库提供的STL外,许多库如Boost提供了更多STL的扩展,如multi_index_container、property_map等,进一步增强了STL的功能。 9. 特殊技巧和陷阱:书中详细介绍了STL使用中的常见陷阱,如迭代器...

    Boost

    4. **容器和数据结构**:Boost库提供了如`multi_index_container`这样的高级容器,以及`bimap`(双向映射)和`flat_map`(扁平映射)等高效数据结构。 5. **函数对象和绑定**:Boost.Bind和Boost.Lambda提供了函数...

    Boost程序库完全开发指南.pdf

    容器和数据结构是编写复杂程序不可或缺的部分,Boost不仅包括了标准模板库(STL)中的容器,还提供了一些特殊容器来解决特定问题,如multi_index_container等。在并发编程方面,Boost提供了多种同步机制和线程工具,...

    Boost 库入门.chm.zip

    2. **容器和算法(Containers and Algorithms)**:Boost库扩展了标准模板库(STL),提供了如`multi_index_container`、`flat_map`等高级容器,以及`assign`、`lambda`等算法工具,增强了代码的灵活性和可读性。...

Global site tag (gtag.js) - Google Analytics