Symbian中的动态集合Rarray的使用

来源:互联网 发布:网络言论自由 编辑:程序博客网 时间:2024/05/17 23:56
    有C++经验的人,刚开始写sybmian程序,往往觉得sybmian的数据结构都比较奇怪,比如描述符,比如动态数组,另外很有用的一些C++的数据结构,比如map之类的都没提供,通用的STL类型也没法在symbian中使用。
    但实际上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)
    {
       // 找到了对应内容, 处理...
    }
原创粉丝点击