我如何对CString
的数组进行排序(升序或降序)?我看到很多对std::vector
的引用,但我找不到将CString数组转换为向量的示例。
答案 0 :(得分:4)
由于CString
班级有operator<
,您应该可以使用std::sort
:
CString myArray[10];
// Populate array
std::sort(myArray, myArray + 10);
答案 1 :(得分: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;
}
}
使用std::vector
而不是原始数组有点复杂,因为Visual C ++的标准库实现还不支持每版本11.0 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
使用的方式没有区别。至少在这个抽象层次上。与原始阵列相比,它更安全,功能更丰富。
答案 2 :(得分:1)
如果要对CList进行排序,可以查看this。