map如何删除相同的元素?

cs_luxey 2010-01-05 04:28:32

//定义
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"}..
//有什么方法吗?
...全文
315 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishion 2010-01-06
  • 打赏
  • 举报
回复
类似参考
if( map_list.find(ID) == map_list.end())
{
ko ko_info;
m_MapInfo.insert(pair<int,ko>(i, ko_info));

}
harry330 2010-01-06
  • 打赏
  • 举报
回复
struct ko
{
int ID;
CString name;

bool operator==(const ko& ojb)
{
if (ID == obj.ID) return true;
else return false;
}
};
定义==运算符后,map插入的时候就不会有ID重复的了。
cheidtf 2010-01-05
  • 打赏
  • 举报
回复
如果楼主用得是Vector 容器,才需要去清理相同的元素。

enter333 2010-01-05
  • 打赏
  • 举报
回复
LS的同学说的没错。
llliang11 2010-01-05
  • 打赏
  • 举报
回复
map容器在insert时就会检查是否有键值相同的,如果有则不会插入,没有才会插入。
map_list中根本就不会同时有{1,"123"}{1,"789"},只有第一个{1,"123"}了
ziplj 2010-01-05
  • 打赏
  • 举报
回复
建立映射的时候使用指针比较好

map<int,ko* > map_list;

这样在for循环插入的时候写成这样

for(int i = 0 ; i < 5 ; i++)
{
ko* pKo = map_list[i]; // 插入之前判断一下是否存在
if(pKo == NULL)
pKo = new ko();
}
cs_luxey 2010-01-05
  • 打赏
  • 举报
回复
我在for循环里面插入的 怎么在插入之前比较呢?
bragi523 2010-01-05
  • 打赏
  • 举报
回复
能不能插入的时候就比较一下
或者遍历存到另一个map里面

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧