C++关于map的插入 删除

来源:互联网 发布:win7动态桌面壁纸软件 编辑:程序博客网 时间:2024/06/08 16:12
void testInsert()
{
map<int,string> mapData;
// 插入元素
pair<map<int,string>::iterator, bool> rt1;
pair<map<int,string>::iterator, bool> rt2;
pair<map<int,string>::iterator, bool> rt3;
pair<map<int,string>::iterator, bool> rt4; 
// insert 插入
rt1 = mapData.insert(pair<int,string>(1, "test1"));
rt2 = mapData.insert(map<int,string>::value_type(2, "test2"));
rt3 = mapData.insert(make_pair(3, "test3"));
rt4 = mapData.insert(make_pair(3, "test33"));
// 数组插入
mapData[5] = "test5";
mapData[5] = "test55";
cout << "rt1 = " << rt1.second << " ";
cout << "rt2 = " << rt2.second << " ";
cout << "rt3 = " << rt3.second << " ";
cout << "rt4 = " << rt4.second << endl;
map<int,string>::iterator it = mapData.begin();
while (it != mapData.end())
{
cout << it->second << endl;
++it;
}
// 输出结果为// rt1 = 1 rt2 = 1 rt3 = 1 rt4 = 0
// test1
// test2
// test3
// test55
// insert插入数据时,如果key值存在,插入失败,不修改key值对应的value值,否则插入成功
// 数组方式插入 如果当前key值存在修改当前key对应的value值,否则插入
}


void testDelete()
{
map<int,string> mapData;
mapData.insert(make_pair(1, "test1"));
mapData.insert(make_pair(2, "test2"));
mapData.insert(make_pair(3, "test3"));
mapData.insert(make_pair(4, "test4"));
mapData.insert(make_pair(5, "test5"));
// mapData数据为(1,"test1") (2,"test2") (3,"test3") (4,"test4") (5,"test5")
// 遍历删除
// 错误1// 
// for (map<int,string>::iterator it = mapData.begin(); it != mapData.end(); ++it)
// {
// if (it->first % 2 == 0)
// {
// mapData.erase(it);   // 错误原因:it指针在元素被删除后失效了
// }
// }


// 正确方法1
for (map<int,string>::iterator it = mapData.begin(); it != mapData.end(); /*++it*/)
{
if (it->first % 2 == 0)
{
mapData.erase(it++);
// it++ // 操作流程 
// _Myiter operator++(int) 
// { 
// postincrement
// _Myiter _Tmp = *this;
// 备份
// ++*this;
// +1
// return (_Tmp); 
// 返回备份
// }
}
else
{
++it;
}
}
// mapData数据为(1,"test1") (3,"test3")(5,"test5")
mapData.insert(make_pair(2, "test2"));mapData.insert(make_pair(4, "test4"));
// 正确方法2
for (map<int,string>::iterator it = mapData.begin(); it != mapData.end(); /*++it*/)
{
if (it->first % 2 == 0)
{
it = mapData.erase(it);
}
else
{
++it;
}
}
// mapData数据为(1,"test1") (3,"test3")(5,"test5")
mapData.insert(make_pair(2, "test2"));
mapData.insert(make_pair(4, "test4"));
// 正确方法3
for (map<int,string>::iterator it = mapData.begin(); it != mapData.end(); /*++it*/)
{
if (it->first % 2 == 0)
{
map<int,string>::iterator itTmp = it;
++it;
mapData.erase(itTmp);
}
else
{
++it;
}
}
// mapData数据为(1,"test1") (3,"test3")(5,"test5")
// iterator erase(const_iterator _First, const_iterator _Last)


mapData.insert(make_pair(2, "test2"));
mapData.insert(make_pair(4, "test4"));
map<int,string>::iterator it = mapData.begin();
++it;
++it;
mapData.erase(mapData.begin(), it);
// mapData数据为(3,"test3") (4,"test4")(5,"test5")
mapData.insert(make_pair(1, "test1"));
mapData.insert(make_pair(2, "test2"));
// size_type erase(const key_type& _Keyval)
// 删除key值为3的项
mapData.erase(3);
// mapData数据为(1,"test1")(2,"test2") (4,"test4")(5,"test5")
}
原创粉丝点击