有C++经验的人,刚开始写sybmian程序,往往觉得sybmian的数据结构都比较奇怪,比如描述符,比如动态数组,另外很有用的一些C++的数据结构,比如map之类的都没提供,通用的STL类型也没法在symbian中使用。
但实际上Rarray是一个设计的很有意思的类,它提供了InsertInOrder、FindInOrder两个函数,分别可以按照排序方式插入记录和快速查找功能。这两个函数,都使用了一个TLinearOrder<T> anOrder结构。而TLinearOrder<T>提供一个
但实际上Rarray是一个设计的很有意思的类,它提供了InsertInOrder、FindInOrder两个函数,分别可以按照排序方式插入记录和快速查找功能。这两个函数,都使用了一个TLinearOrder<T> anOrder结构。而TLinearOrder<T>提供一个
TLinearOrder(TInt(*anOrder)(const T&,const T&));构造函数,这个构造函数的参数是一个函数指针,指向一个比较大小的函数。
struct TIndex
{
TUint index;
TBuf8<10> key;
};
// 比较函数
TInt CompareKey (const struct
TIndex
& First, const struct
TIndex
& Second)
{
return First.key.Compare(Second.key);
}
TLinearOrder<struct TIndex> anOrder(
CompareKey
);
RPointerArray<struct TIndex> IndexTest;
// 插入记录
struct TIndex*
pIndexText = new (ELeave)
TIndex
;
pIndexText->index = 0;
pIndexText->
key.Copy(_LIT8("test"));
IndexTest
.InsertInOrder(pIndexText,
anOrder
);
// 查找记录
TInt Pos = 0;
struct
TIndex
Finder;
Finder.
index = 100;
Finder
.key.Copy(_LIT8("test"));
if((Pos=
IndexTest
.FindInOrder(&Finder,
anOrder
)) != KErrNotFound)
{
// 找到了对应内容, 处理...
}