1

の配列をソート (昇順または降順) するにはどうすればよいCStringですか? への参照をたくさん見ましたがstd::vector、CString 配列をベクトルに変換する例が見つかりません。

4

3 に答える 3

4

CStringそれがATL/MFCを意味すると仮定すると、未加工の配列をソートするためにCString使用する完全なデモ プログラム:std::sort

#include <atlbase.h>
#include <atlstr.h>

#include <algorithm>        // std::sort
#include <iostream>         // std::wcout, std::endl
#include <utility>          // std::begin, std::end

std::wostream& operator<<( std::wostream& stream, CString const& s )
{
    return (stream << s.GetString());
}

int main()
{
    using namespace std;

    CString strings[] = { "Charlie", "Alfa", "Beta" };

    sort( begin( strings ), end( strings ) );
    for( auto&& s : strings )
    {
        wcout << s << endl;
    }
}

Visual C++ の標準ライブラリの実装はバージョン 11.0ではまだサポートされていないため、未加工の配列の代わりに aを使用するstd::vectorのは少し複雑です。std::initialiser_list以下の例では、生の配列を使用してデータを提供していますCString(これは、配列をに変換する例std::vectorです)。しかし、データはファイルから文字列を読み取るなど、任意のソースから取得される可能性があります。

#include <atlbase.h>
#include <atlstr.h>

#include <algorithm>        // std::sort
#include <iostream>         // std::wcout, std::endl
#include <utility>          // std::begin, std::end
#include <vector>           // std::vector

std::wostream& operator<<( std::wostream& stream, CString const& s )
{
    return (stream << s.GetString());
}

int main()
{
    using namespace std;

    char const* const stringData[] = { "Charlie", "Alfa", "Beta" };

    vector<CString> strings( begin( stringData ), end( stringData ) );

    sort( begin( strings ), end( strings ) );
    for( auto&& s : strings )
    {
        wcout << s << endl;
    }
}

ご覧のとおり、未加工の配列と比較して、 の使用std::vector方法に違いはありません。少なくともこのレベルの抽象化では。生の配列と比較して、より安全で、より豊富な機能を備えています。

于 2012-11-16T14:37:27.850 に答える
4

CStringクラスには があるので、operator<使用できるはずですstd::sort

CString myArray[10];

// Populate array

std::sort(myArray, myArray + 10);
于 2012-11-16T14:22:19.700 に答える
1

CList を並べ替えたい場合は、こちらをご覧ください

于 2012-11-16T15:03:49.113 に答える