1

内部に文字列を持つ構造体アイテムのベクトルがあります。アイテム内の文字列をアルファベット順に並べて、アイテムのベクトルをソートしようとしています...これまでのところ、

vector<Item> sorter;

std::sort(sorter.begin(), sorter.end(), SortHelp);

//predcate function
bool SortHelp(Item const& one, Item const& two) 
{
    return one.type < two.type;
}

*type は、ソートに使用している文字列です

文字列をアルファベット順にソートするように述語関数を変更するにはどうすればよいですか?

4

2 に答える 2

2

次の関数は、外部ライブラリを使用せずに 2 つの で大文字と小文字を区別しない比較を行いstd::stringます (ただし、C++11 です)。

bool caseinsensitivecompare(string s1, string s2) {
    locale loc;
    std::transform(s1.begin(),s1.end(),s1.begin(), 
                   [loc](char c){return std::toupper<char>(c,loc);});
    std::transform(s2.begin(),s2.end(),s2.begin(), 
                   [loc](char c){return std::toupper<char>(c,loc);});
    return (s1 < s2);
}
于 2013-02-10T03:21:38.227 に答える
0

Case insensitive string comparison C++ (2012)で提案されているように、文字列を比較strcasecmp()すると正しい答えが得られconst char *ます。

C++ 文字列を比較する場合、 Case insensitive string comparison in C++ (2008) で示唆されているように、Boost ライブラリにはis_iless()があり、ヘッダーはここにあります。

于 2013-02-10T02:26:58.217 に答える