16

vectorを比較してpair.firstこれを並べ替えるにはどうすればよいstd::stringですか? (静的比較機能を提供せず、ブーストも使用しません)。

4

5 に答える 5

39
std::vector<std::pair<std::string, bool> > v;
std::sort(v.begin(), v.end());

std::pair最初に要素で、次に要素operator<でソートするオーバーロード。したがって、デフォルトの並べ替え順序 ( ) を使用して単に並べ替えると、目的の順序が得られます。firstsecondvectoroperator<

于 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 に答える