vector
をpair.first
(これはstd::string
)と比較すると、どのように並べ替えることができますか? (静的な比較機能を提供せず、ブーストを使用することもありません)。std :: vector <std :: pair <std :: string、bool >>を文字列で並べ替える?
答えて
std::vector<std::pair<std::string, bool> > v;
std::sort(v.begin(), v.end());
std::pair
過負荷operator<
second
要素によってその後first
要素によって第一ソートします。したがって、デフォルトの並べ替え順序(operator<
)を使用してvector
を並べ替えるだけで、希望の順序が得られます。
カスタムコンパレータを使用して、ペア '.first
のみを注文することができます。
sort(begin, end,
compose2(less<string>(),
select1st<pair<string, bool> >(),
select1st<pair<string, bool> >()));
'select1st'はC++標準ライブラリの一部ではないことに注意してください。 –
Mmm。幸いなことに、次のように書くのは簡単です: 'template
本当にジェームズの答えのような私が、あなたが考慮する必要があります一つの他の選択肢があります - ちょうどstd::map
にすべてを注ぎ込む:あなたが重複している文字列を持っている場合、
std::map<std::string, bool> myMap(v.begin(), v.end());
または、std::multimap
:
std::multimap<std::string, bool> myMultiMap(v.begin(), v.end());
これはOとは反対にするために(n)は、あなたは、新しいキー/値のペアを追加または削除する必要がある場合、あなたはO(LG n)がでそうすることができるという追加の利点を持っていますソートされたベクトル。
本当にベクトルを使用する必要がある場合は、Jamesの答えを参照してください。しかし、ペアのベクトルがある場合は、実際にはstd::map
が必要になる可能性があります。
- 1. std :: vector <std::string>クラッシュ
- 2. std :: map <X、std :: vector <Y>>を繰り返し、ベクトルを並べ替える
- 3. std :: std :: stringとstd :: vectorの間の移動<unsigned char>
- 4. エラー2664 - std :: vector <...>をstd :: tr1 :: shared_ptr
- 5. `std :: vector <std :: uint8_t>の高速コピー
- 6. 反復::ベクトル<std :: vector <char>>?
- 7. C++のstd :: vectorをstd :: vector <unsigned char>に変換する
- 8. std :: vector <std :: vector <int>> push_backによりヒープバッファオーバーフローが発生する
- 9. レンジ-forループとstd ::ベクトル<bool>
- 10. boost :: interprocess - std :: string vs std :: vector
- 11. `std :: vector <uchar>`を `std :: ostream`に保存するには?
- 12. 「マージ(のstd ::ベクトル<int>&、のstd ::ベクトル<int>&)
- 13. のstd ::機能とstd :: <code>std::packaged_task</code>が<code>void operator()(ArgTypes... args)</code>をオーバーロードしていますので、私は、<code>std::function<void()></code>の<code>std::vector</code>に<code>std::packaged_task</code>を移動しようとしていますpackaged_task変換
- 14. <はstd :: reference_wrapper <T>>はstd ::ベクトルします<T>
- 15. boost :: ptr_containerとstd :: vector <shared_ptr>
- 16. qsort on std :: vector <float*> _data
- 17. 私はどのような状況std :: map <A,B>は、並べ替えられたstd :: vector <std :: pair <A,B>>より速くなりますか?
- 18. std :: vectorの代わりに<uint16_t>のstd :: vectorにバイナリファイルを読み込みます。<char>
- 19. 'this'ポインタを 'std :: stack <_Ty>'から 'std :: stack <_Ty>&'
- 20. 検索文字列は、私は</p> <pre><code>std::vector<std::string> vec; std::string myString; </code></pre> <p>を持っていると私は<code>myString</code>が<strong>大文字小文字を区別しない</strong> comaprisonsを使用して<code>vec</code>であるかどうかを確認する必要が鈍感なC++
- 21. std :: is_signedの相違点<T>とstd :: numeric_limits <T> :: is_signed?
- 22. 未定義テンプレートの暗黙的なインスタンス化 'std :: basic_string <char、std :: char_traits <char>、std :: allocator >'
- 23. gdbでboost :: ptr_deque <std::string>を調べる方法は?
- 24. ブースト::はstdするバリアント<T> ::文字列
- 25. 私は2つの機能</p> <pre><code>void foo() { std::cout << 1 << std::endl; } void bar() { std::cout << 2 << std::endl; } </code></pre> <p>をお持ちの場合は2個の関数のC++
- 26. 静的なstd :: vectorを使用したメモリリーク(並べ替え)
- 27. スレッドセーフstd :: atomic <vector<int>>を作成できますか?
- 28. std ::ポインタのコンテナに並べ替え
- 29. std :: functionの比較<>
- 30. std :: set <VALUE、std :: owner_less <VALUE>>の目的は何ですか?
これはC++ 0xのみの回答です。 ;)編集:2つのネストされたテンプレート '<>'を閉じる '' ''トークンはC++ 0xのみです。 –
@Charles:Ha!ええ、私はおそらく多くの答えでそれを行います。私は '>>'をサポートするコンパイラの使用にも慣れています。 –
+1:私は 'std :: pair :: operator <()'が多重定義されていることを知らなかった。今やる! –