vector
を比較してpair.first
これを並べ替えるにはどうすればよいstd::string
ですか? (静的比較機能を提供せず、ブーストも使用しません)。
12659 次
5 に答える
39
std::vector<std::pair<std::string, bool> > v;
std::sort(v.begin(), v.end());
std::pair
最初に要素で、次に要素operator<
でソートするオーバーロード。したがって、デフォルトの並べ替え順序 ( ) を使用して単に並べ替えると、目的の順序が得られます。first
second
vector
operator<
于 2011-01-05T23:19:04.567 に答える
4
私はジェームズの答えが本当に好きですが、考慮したいオプションがもう1つあります。すべてをに注ぎ込むだけです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
。
于 2011-01-05T23:36:06.377 に答える
0
カスタムコンパレータを使用して、ペア.first
のみで注文できます。
sort(begin, end,
compose2(less<string>(),
select1st<pair<string, bool> >(),
select1st<pair<string, bool> >()));
于 2011-01-05T23:29:53.960 に答える