6
有沒有一種內置的方法來在C++中對CArray進行排序?如何對用戶定義類型的CArray進行排序?
有沒有一種內置的方法來在C++中對CArray進行排序?如何對用戶定義類型的CArray進行排序?
std::sort()
應該工作:
CArray<int> arrayOfInts;
arrayOfInts.Add(7);
arrayOfInts.Add(114);
arrayOfInts.Add(3);
std::sort(arrayOfInts.GetData(), arrayOfInts.GetData()+arrayOfInts.GetSize());
這裏使用的指針數組作爲開始迭代器的第一個元素,而指針到一個過去的最後一個迭代器的最後一個元素(不應該反正解除引用,所以一切都很好)。您也可以通過在自定義斷言,如果數組包含更多有趣的數據:
struct Foo
{
int val;
double priority;
};
bool FooPred(const Foo& first, const Foo& second)
{
if (first.val < second.val)
return true;
if (first.val > second.val)
return false;
return first.priority < second.priority;
}
//...
CArray<Foo> bar;
std::sort(bar.GetData(), bar.GetData()+bar.GetSize(), FooPred);
噢 - 不使用CArray
。
只是瀏覽MSDN,我沒有看到任何保證CArray連續存儲數據。我期望它,但... std :: vector最初有這個缺陷,並且標準被發現時被糾正。 – 2008-10-28 23:06:27