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 :: pair <const K, V> *> to std :: vector <std :: pair <const K, V>>
- 2. std :: vector <std::string>クラッシュ
- 3. std :: vectorから要素を移動する<T1>からstd :: vector <std :: pair <T1,T2>>
- 4. std :: arrayの動作<bool>とstd :: vector <bool>
- 5. 'std :: vector <std :: basic_string <char>> *'から 'const std :: vector <std :: basic_string <char>>&'
- 6. std :: shared_ptr <std :: vector <double>>
- 7. のstd ::リスト<std::string> ::イテレータはstd ::文字列にする
- 8. std :: map <X、std :: vector <Y>>を繰り返し、ベクトルを並べ替える
- 9. std :: std :: stringとstd :: vectorの間の移動<unsigned char>
- 10. std :: vector <std::string>空の文字列を代わりに挿入
- 11. Bind const std :: pair <T, U>&std :: pairの値に<const T, U>
- 12. std :: shared_ptr << std :: vector <double>>を関数に渡す
- 13. std :: vector <bool>をstd :: stringに変換してください。
- 14. エラー2664 - std :: vector <...>をstd :: tr1 :: shared_ptr
- 15. boost :: variant <std :: vector <int>、std :: vector <String>>を反復処理する方法は?
- 16. std :: unique()をstd :: vectorで使用する<std :: unordered_set <T>>
- 17. `std :: vector <std :: uint8_t>の高速コピー
- 18. 反復::ベクトル<std :: vector <char>>?
- 19. std :: vectorのメモリレイアウト<__m128i>
- 20. C++のstd :: vectorをstd :: vector <unsigned char>に変換する
- 21. std :: unordered_map <std :: string、std :: vector <int>>のベクトルをコピーせずに更新するには?
- 22. std :: vector <std :: vector <int>> push_backによりヒープバッファオーバーフローが発生する
- 23. std :: listの並べ替え<myclass*> myclass :: operator [](int i)
- 24. のstd ::リストだから、<std::string>
- 25. std :: future <both ::どちらか<int、std :: string >>セグメンテーションフォールト
- 26. std :: map <std :: string、std :: string> JavaCPPの変換
- 27. なぜstd :: sortはstd :: vector <std :: vector <int>>をデフォルトでstd :: vectorにすると、間違った結果になるのですか?
- 28. レンジ-forループとstd ::ベクトル<bool>
- 29. std :: listの実装<bool>
- 30. なぜstd :: vector <bool>に.data()がないのですか?
これはC++ 0xのみの回答です。 ;)編集:2つのネストされたテンプレート '<>'を閉じる '' ''トークンはC++ 0xのみです。 –
@Charles:Ha!ええ、私はおそらく多くの答えでそれを行います。私は '>>'をサポートするコンパイラの使用にも慣れています。 –
+1:私は 'std :: pair :: operator <()'が多重定義されていることを知らなかった。今やる! –