1

我如何对一个数组进行排序(升序或降序)CString?我看到了很多对 的引用std::vector,但我找不到将 CString 数组转换为向量的示例。

4

3 回答 3

4

由于CString课程有一个operator<你应该能够使用std::sort

CString myArray[10];

// Populate array

std::sort(myArray, myArray + 10);
于 2012-11-16T14:22:19.700 回答
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;
    }
}

使用 astd::vector而不是原始数组有点复杂,因为 Visual C++ 的标准库实现还不支持std::initialiser_list每个版本 11.0。在下面的示例中,我使用原始数组来提供数据(这是将CString数组转换为 a 的示例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::vectoris 的使用方式没有区别。至少在这个抽象级别上。与原始数组相比,它更安全,功能更丰富。

于 2012-11-16T14:37:27.850 回答
1

如果要对 CList 进行排序,可以查看this

于 2012-11-16T15:03:49.113 回答