2012-03-23 4 views
-2

STLコンテナから特定の値を持つ要素を選択し、そのコンテナの最後に移動するにはどうすればよいですか?STLコンテナ選択された要素を移動

+0

コードとその失敗の方法を記入してください。 – bernie

+0

具体的にしてください。どのコンテナ? – Nawaz

+0

私はどのコンテナがそのコンテナに最適か聞きたいので、どのコンテナを指定しませんでした。しかし、ベクターやリストは私の選択かもしれません。 – userbb

答えて

5

あなたはSTDを使用したいについてのコメント::ベクトルを作っ考えると、私はSTD ::パーティションまたはSTDを使用してお勧めしたい:: stable_partition、すなわち:

#include <algorithm> 
#include <functional> 
#include <iostream> 
#include <iterator> 
#include <vector> 

int main() 
{ 
    int init_values[] = {1, 1, 7, 3, 19, 5, 5, 4, 5, 2, 5, 8, 9, 10, 5, 1}; 
    std::vector<int> values(
     init_values, 
     init_values + sizeof(init_values)/sizeof(int) 
    ); 

    std::stable_partition(
     values.begin(), values.end(), 
     std::bind1st(std::not_equal_to<int>(), 5) 
    ); 

    std::copy(values.begin(), values.end(), std::ostream_iterator<int>(std::cout, ", ")); 
    std::cout << "\n"; 

    return 0; 
} 

このコードは、すべての要素を移動しますベクトルであり、残りの要素の相対的な順序を維持したまま、ベクトルの最後まで5に等しい。

+0

私はなぜSTLがそのような特殊なアルゴリズムを持っているのだろうかと思います。 – userbb

+0

@userbb:標準ライブラリには、さまざまな用途とパフォーマンスを備えたいくつかの「順序付け」[アルゴリズム](http://en.cppreference.com/w/cpp/algorithm)があります( 'std :: partition'、' std :: stable_partition '、' std :: nth_element'、 'std :: partial_sort'、' std :: stable_sort'、 'std :: sort')を実行します。 – Blastfurnace

5

あなたは要素目標値に等しくないためtrueを返す述語でstd::partitionを使用して試みることができます。要素の相対的な順序を保持する必要がある場合は、std::stable_partitionもあります。

関連する問題