那位给我讲讲CMap怎么用阿,我的E文不好,最好有例子。

解决方案 »

  1.   

    CMapX m_Mapx;if(m_Mapx.Create(NULL, WS_VISIBLE, CRect(0, 0, 100, 100), this, IDC_MAP))//IDC_MAP为定义ID;
    {
        m_Mapx.MoveWindow(rect.left,rect.top,rect.Width(),rect.Height(),TRUE);
        m_Mapx.SetGeoSet("test.gst");
    }
    其它就看你的操作了。
      

  2.   

    template< class KEY, class ARG_KEY, class VALUE, class ARG_VALUE >class CMap : public CObject用来实现键和值的映射。其中键是唯一值
    CMap<int, int, CString, CString> 实现的是整数和字符串的映射,比如1->"aaa", 4->"sss", 100->"sadf"
    此后就可以使用整数键获得需要的字符串值typedef CMap<int, int, CString, CString>  CMapIntToString;
    CMapIntToString map;
    (1)初始化:map.SetAt(1, "aaa"); map.SetAt(4,"sss");map.SetAt(100,"sadf");
    (2)查找:
     int i = 4;
     CString str;
     if(map.Lookup(i, str)) //键值映射存在
    {
       ASSERT(str == "sss");
    }
    else
    {
     //键值映射不存在
    }
    (3)遍历:
    POSITION pos = map.GetStartPosition();
    while(pos != NULL)
    {
       int i;
       CString str;
       map.GetNextAssoc(pos, i, str);
       TRACE("Map %d=>%s\n", i, str);
    }
    }
      

  3.   

    CMap是一个模板:
    template< class KEY, class ARG_KEY, class VALUE, class ARG_VALUE >class CMap
    KEY  对象的类,用作映射的关键码
    ARG_KEY  参数KEY使用的数据类型,通常为KEY的参考
    VALUE  存储在映射中对象的类
    ARG_VALUE  参数VALUE使用的数据类型,通常为VALUE的参考
    操作符:
    Lookup   查找MAP中的某个元素
    SetAt    将某个元素设定到指定的位置
    RemoveKey  通过Key移除某个在Map中的元素
    RemoveAll  移除全部在Map中的元素
    GetStartPosition 得到第一个元素在Map中的位置
    GetNextAssoc 得到下一个元素在Map中的位置
    GetHashTableSize  得到MAP的大小
    InitHashTable  初始设定Map的大小
    状态:
    GetCount  返回MAP中元素的个数
    IsEmpty   检查是否MAP中无元素MSDN中CMAP的一个实例:
    // 定义一个map类型,key为int型,map中元素类型为CPoint类
    CMap<int,int,CPoint,CPoint> myMap;   // 加10个item到map中.
       for (int i=0;i < 10;i++)
          myMap.SetAt( i, CPoint(i, i) );   // 遍历Map,将key为偶数的从map中移除
       POSITION pos = myMap.GetStartPosition();
       int    nKey;
       CPoint pt;
       while (pos != NULL)
       {
          myMap.GetNextAssoc( pos, nKey, pt );      if ((nKey%2) == 0)
             myMap.RemoveKey( nKey );
       }
      

  4.   

    简单的使用:
    CString Key;
    CString Book;
    CMapStringToString Map;//初始化链表
    Key="First";
    Book="it is the first Key!";
    Map.SetAt(Key,Book);
    Key="Second";
    Book="it is the Second Key!";
    Map.SetAt(Key,Book);
    //查找链表的值
    CString tmp_key;
    CString tmp_book;
    tmp_key="Second";
    Map.Lookup(tmp_key,tmp_book);
    AfxMessageBox(tmp_book);
    //对话框显示it it the Second Key!
      

  5.   

    不好意思,我当成GIS中的CMapX类了,^_^
    CMap的操作如下:
    CMap 构造一个关键字和元素值映射的集合类。 
    操作:
    Lookup 通过给定的关键字查找相应的元素值。 
    SetAt 向Map中插入一个元素单元;若存在匹配键字,则替代之。 
    operator [] 向Map中插入一个元素 -SetAt的子操作 
    RemoveKey 移除由关键字标示的元素单元 
    RemoveAll 移除Map中的所有元素单元 
    GetStartPosition 返回第一个元素单元的位置 
    GetNextAssoc 读取下一个元素单元 
    GetHashTableSize 返回哈希表的大小(元素单元的数目) 
    InitHashTable 初始化哈希表,并指定它的大小 
    GetCount 返回Map中元素的数目 
    IsEmpty 检查Map是否为空(无元素单元)
      

  6.   

    c++ stl
    看看这本书你就明白了,有中文版
      

  7.   

    请教一下:KEY和ARG_KEY有什么区别,为什么都用int?
    模板我不太懂。
      

  8.   

    CMap是使用哈希表来存储数据得,所以,不能将CString类型作为关键字,必须为数字类型得。你可以看看MSDN的例子COLLECT
      

  9.   

    据我理解:
    KEY是hash表中的关键字类型,而ARG_KEY是可以用来对存放对关键字的变量赋值时可能要用到的copy 构造函数调用的参数类型,int型不是太看的出来,比如
    class A
    {     A(A& a)    //拷贝构造函数,用于对A类型的变量赋值,注意参数类型A&
        { 
             x = a.x;
             y = a.y;
          }
     private:
        long x;
        long y;
    }当你想用A类的值作为hash表的关键字的时候,KEY 和 ARG_KEY 就得用 A 和 A&。
    同样VALUE和ARG_VALUE也是一样。
    因此如果你想用某个类作为关键字或值建立一个CMap,则必须保证该类有拷贝构造函数。
      

  10.   

    to guoxiny(狼):
    好像cstring也行的吧,我用cstring写了一个
    CMap<CString, LPCTSTR,CustomizeGroupStruct, CustomizeGroupStruct&> Map;
    GroupStruct是我自己写的一个结构
      

  11.   

    CMap是一个模板:
    template< class KEY, class ARG_KEY, class VALUE, class ARG_VALUE >class CMap
    KEY  对象的类,用作映射的关键码
    ARG_KEY  参数KEY使用的数据类型,通常为KEY的参考
    VALUE  存储在映射中对象的类
    ARG_VALUE  参数VALUE使用的数据类型,通常为VALUE的参考关于ARG_KEY的进一步说明;
    1.ARG_KEY可以是和KEY相同,即 KEY
    2.ARG_KEY可以是KEY的引用,即 KEY&
    3.ARG_KEY可以是能够自动转换成 KEY类型的其他对象比如,如果KEY是CString,ARG_KEY可以是 
      CString,CString&,LPCTSTR
    例子
    假设有一个学生到老师的对应关系:
    deftype CMap<CString,LPCTSTR,CString,CString&> CMyMap;
    CMyMap name2teacher;
    意思是:
    (1)这个CMap中存放的一对数据是CString(同学姓名)和Ctring(老师姓名)
    (2)在进行函数操作的时候,涉及到的
       同学姓名应该用LPCTSTR(字符串)做参数
       老师姓名应该用CString&(引用)做参数
    (3)使用LoopUp查找"ZhangSan"的老师的名字,应该
       CString teather;
       BOOL bOK=LoopUp("ZhangSan",teather);
       if(bOK)
       {
         cout<<"ZhangSan's teather is"<<teather<<endl;
       }
       //注:原形
       //BOOL Lookup( ARG_KEY key, VALUE& rValue );