boost::multi_index "other" 个索引的插入函数

boost::multi_index insertion function for "other" indices

这是一个带有散列索引和序列索引的整数容器:

#include <iostream>
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/identity.hpp>
#include <boost/multi_index/sequenced_index.hpp>

int main()
{
    boost::multi_index_container<
    int,
    boost::multi_index::indexed_by<
        boost::multi_index::hashed_unique<boost::multi_index::identity<int>>,
        boost::multi_index::sequenced<>
        >
    > c;
    for (int i=99; i>=0; --i) c.get<0>().insert(i);
    for (int j : c.get<0>()) std::cout << " " << j;
    std::cout << std::endl;
    for (int k : c.get<1>()) std::cout << " " << k;
    std::cout << std::endl;
    return 0;
}

当我 运行 我得到:

 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 2 1 0   
 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

第一行显示元素 "scattered" 通过哈希索引,正如预期的那样。第二行显示元素通过排序索引按插入顺序排列。但是元素是通过哈希索引插入的;我们对序列索引的元素有什么期望?即当一个索引调用insert时,是否定义了用于"other"个索引的插入函数?

具体来说:当一个多索引容器有一个哈希索引和一个序列索引,并且元素只通过哈希索引插入时,元素是否总是通过有序索引按插入顺序排列?

至于顺序索引,docs say:

有序索引中的元素默认根据插入顺序排序:这意味着通过 multi_index_container 的不同索引插入的新元素将附加到索引的末尾排序索引.