楽しみのために、想像できる最も単純な並べ替えアルゴリズムを実装しました。
template<typename Iterator>
void treesort(Iterator begin, Iterator end)
{
typedef typename std::iterator_traits<Iterator>::value_type element_type;
// copy data into the tree
std::multiset<element_type> tree(begin, end);
// copy data out of the tree
std::copy(tree.begin(), tree.end(), begin);
}
std::sort
私のテストデータよりも約20倍遅いだけです:)
次に、移動セマンティクスを使用してパフォーマンスを改善したいと考えました。
template<typename Iterator>
void treesort(Iterator begin, Iterator end)
{
typedef typename std::iterator_traits<Iterator>::value_type element_type;
// move data into the tree
std::multiset<element_type> tree(std::make_move_iterator(begin),
std::make_move_iterator(end));
// move data out of the tree
std::move(tree.begin(), tree.end(), begin);
}
しかし、私が s をソートしているにもかかわらず、これはパフォーマンスに大きな影響を与えませんでしたstd::string
。
次に、連想コンテナは外部から一定であることを思い出しました。つまり、ここでも同じことをstd::move
行いstd::copy
ます:(データをツリーから移動する他の方法はありますか?