首先,代码的最终结果看起来类似于
auto cc(aaa);
boost::stable_sort(cc);
(假设,从您的示例代码来看,aaa
包含范围内的整数[0..size()-1)
)
如果您有能力进行简单复制,只需使用后插入迭代器:
std::vector<int> cc;
for (size_t i = 0; i < aaa.size(); ++i)
boost::copy(boost::equal_range(aaa, i), back_inserter(cc));
否则,您可以使用隐藏累积连接any_range
:
boost::any_range<int, boost::forward_traversal_tag, int> r;
for (size_t i = 0; i < aaa.size(); ++i)
r = boost::join(r, boost::equal_range(aaa, i));
Live On Coliru
#include <boost/range/any_range.hpp>
#include <boost/range/join.hpp>
#include <boost/range/algorithm.hpp>
#include <iostream>
int main() {
std::vector<int> const aaa { 1,1,1,4,5,5,9,42,42,42,42,42,42 };
boost::any_range<int, boost::forward_traversal_tag, int> r;
for (size_t i = 0; i < aaa.size(); ++i)
r = boost::join(r, boost::equal_range(aaa, i));
boost::copy(r, std::ostream_iterator<int>(std::cout << "result: ", " "));
}
Prints
result: 1 1 1 4 5 5 9