2010-12-08 10 views
6

私はstd::vector内の要素をソートする必要があるが、私はソートされているトップNアイテム、全体ではなく、リスト内の唯一の興味:使用のstd :: STDに上位N個のアイテムを見つけるためにソート::ベクトル

例: 10要素のリストで、最初の3つだけをソートする必要があります。 std::sortを使用して

1,2,3

6,7,4,9,8,5はこれを行うことができます...残りの部分を気にしないのですか?

編集

私は単純にベクトルでトップNアイテムを見つける必要がありました。 std::partial_sort_copyは私が必要なものexactelyました。

+1

を - あなただけソートする最初の3つの項目をしたいですか?または、リスト全体の3つの最小要素を先頭に並べ替えることができますか? –

+0

はい;)...それはすることができます! – Incubbus

+0

多分あなたはこれを見てみたいと思うかもしれません:http://stackoverflow.com/questions/217073/partial-sort-of-stdlist – Pacane

答えて

7

これはstd::partial_sortが何のためにあるのかです。

+0

あなたのリンクは、最初の部分がソートされると言っています: "部分範囲[最初、真ん中には、範囲全体の最小要素が昇順でソートされています" –

+0

ルーに感謝します。私は 'partial_sort'、私の頭の中で混乱' partition'を持っていました。 – aschepler

2

注文する場合はpartial_sort、そうでない場合は、範囲を分割する必要がある場合はnth_elementが速くなります。

0

ちょうどあなたが並べ替え停止するソート・ルーチン言う:これは曖昧な質問です

std::vector<int> values; 
for (int i = 0; i < 10; ++i) 
    values.push_back(rand() % 10); 

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

std::cout << "SORTED (Partially)" << std::endl; 
std::sort(values.begin(), values.begin() + 3); 
std::copy(values.begin(), values.end(), std::ostream_iterator<int>(std::cout, " ")); 
std::cout << std::endl; 
+2

最初に質問された質問は非常に不明でしたが、*全体*ベクトルの上位3要素が必要であることが明らかになったので、あなたのアプローチは機能しません。 –

関連する問題