//定义
struct ko
{
int ID;
CString name;
};map<int,ko> map_list;
map<int,ko>::iterator itor;//插入
for(int i=0;i<=10;i++)  
{      
ko ko_info;
m_MapInfo.insert(pair<int,ko>(i, ko_info));
}
//如果插入的结构体为 {1,"123"} {2,"456"} {1,"789"} {3,"abc"} {4,"efg"}..10个结构体//遍历
//我想删除KO结构体ID相同的,也就是删除第三个
//如何遍历得到 {1,"123"} {2,"456"}  {3,"abc"} {4,"efg"}..
//有什么方法吗?

解决方案 »

  1.   

    能不能插入的时候就比较一下
    或者遍历存到另一个map里面
      

  2.   

    我在for循环里面插入的 怎么在插入之前比较呢?
      

  3.   

    建立映射的时候使用指针比较好map<int,ko* > map_list;这样在for循环插入的时候写成这样for(int i = 0 ; i < 5 ; i++)
    {
    ko* pKo = map_list[i]; // 插入之前判断一下是否存在 
    if(pKo == NULL)
    pKo = new ko();
    }
      

  4.   

    map容器在insert时就会检查是否有键值相同的,如果有则不会插入,没有才会插入。
    map_list中根本就不会同时有{1,"123"}{1,"789"},只有第一个{1,"123"}了
      

  5.   

    如果楼主用得是Vector 容器,才需要去清理相同的元素。
      

  6.   

    struct ko
    {
        int ID;
        CString name;    bool operator==(const ko& ojb)
        {
              if (ID == obj.ID) return true;
              else return false;
        }
    };
    定义==运算符后,map插入的时候就不会有ID重复的了。
      

  7.   

    类似参考
    if( map_list.find(ID) == map_list.end())
    {
       ko ko_info;
        m_MapInfo.insert(pair<int,ko>(i, ko_info));}