Функция вставки boost :: multi_index для «других» индексов - PullRequest
0 голосов
/ 03 марта 2020

Вот контейнер целых чисел с хешированным индексом и индексом последовательности:

#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

Первая строка показывает элементы "разбросаны" по индексу ha sh, как и ожидалось. Вторая строка показывает, что элементы находятся в порядке вставки через индекс последовательности. Но элементы были вставлены через индекс ha sh; что можно ожидать от элементов секвенированного индекса? То есть, когда insert вызывается для одного индекса, определены ли функции вставки для «других» индексов?

В частности: когда многоиндексный контейнер имеет хешированный индекс и упорядоченный индекс, а также элементы вставляются только через хешированный индекс, элементы всегда будут в порядке вставки через упорядоченный индекс?

1 Ответ

1 голос
/ 04 марта 2020

Что касается последовательных индексов, документы говорят :

Элементы в последовательном индексе по умолчанию сортируются в соответствии с порядком их вставки: это означает, что новые элементы, вставленные через различные индексы multi_index_container добавляются в конец последовательного индекса.

...