如何获取有序非唯一提升多索引集的某些索引字段的唯一值

how to get unique values of certain index field of ordered non unique boost multi index set

我制作了多个索引的 boost 多索引集,其中大多数索引都是非唯一的。

现在我需要使用迭代器对集合进行循环以获取有序的非唯一索引,但我需要跳过具有相同非唯一值的结构。

换句话说,我只需要使用这个有序的非唯一键的唯一值来循环。

有没有办法只识别非唯一键中的唯一值并使用这个唯一值循环??

我没有放代码,因为这是我正在寻找的一般方法。

我知道 std::unique 但我不想制作另一个容器,因为在制作容器的过程中原始容器正在被修改,这让我很难同步。

您可以使用容器的 upper_bound 函数遍历容器。这是工作示例:

struct MyStruct {
    int group_id, id;
};

struct ByGroupID {};

using StructContainer = boost::multi_index_container<
    MyStruct,
    boost::multi_index::indexed_by<
        boost::multi_index::ordered_non_unique<
            boost::multi_index::tag<ByGroupID>,
            boost::multi_index::member<MyStruct, int, &MyStruct::group_id>
        >
    >
>;

int main() {
    StructContainer my_structs;

    my_structs.insert({1, 1});
    my_structs.insert({1, 2});
    my_structs.insert({1, 3});
    my_structs.insert({2, 4});
    my_structs.insert({2, 5});
    my_structs.insert({3, 6});

    auto &by_group_id = my_structs.get<ByGroupID>();

    for (auto it = by_group_id.begin(); it != by_group_id.end();) {
        std::cout << it->group_id << "\n";
        it = by_group_id.upper_bound(it->group_id);
    }
}

输出1、2、3。