gpt4 book ai didi

c++ - partial_sort on boost multi_index 的随机访问索引

转载 作者:搜寻专家 更新时间:2023-10-31 02:20:32 24 4
gpt4 key购买 nike

我想知道是否有办法在 multi_index 的随机访问索引上使用 std::partial_sortboost::partial_sort .

如果我尝试使用 std::patial_sort,我会收到编译器错误,提示迭代器取消引用是 const,因此我无法编译。我知道为了保持索引的顺序,所有 multi_index 迭代都是 const 迭代器。但是有内部排序函数,但是,boost multi_index 中没有 partial_sort。

最佳答案

随机访问迭代器提供rearrangement , 但不是直接突变。所以,使用代理来做:

Live On Coliru

#include <boost/multi_index_container.hpp>
#include <boost/multi_index/random_access_index.hpp>
#include <iostream>

using Record = int; // or your user-defined type, of course

namespace bmi = boost::multi_index;
using Table = bmi::multi_index_container<Record,
bmi::indexed_by<
bmi::random_access<bmi::tag<struct RA_index> >
> >;

int main() {
Table table;
for (Record i : { 1, 7, 4, 8, 4, 3, 4, 6, 1, -3, 31 })
table.push_back(i);

// now the partial sort:
{
std::vector<boost::reference_wrapper<Record const> > tmp(table.begin(), table.end());

std::partial_sort(tmp.begin(), tmp.begin()+8, tmp.end());

// apply back to RA_index
table.get<RA_index>().rearrange(tmp.begin());
}

std::cout << "Partially sorted: ";
std::copy(table.begin(), table.end(), std::ostream_iterator<Record>(std::cout, " "));
}

打印

Partially sorted: -3 1 1 3 4 4 4 6 8 7 31 

关于c++ - partial_sort on boost multi_index 的随机访问索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32567547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com