要覆盖std::map以前关键字对应的值,只能通过数组方式插入吗?

clever101
博客专家认证
2008-07-04 10:16:42
在网上看到一篇文章:
在构造map容器后,我们就可以往里面插入数据了。这里讲三种插入数据的方法:
第一种:用insert函数插入pair数据,下面举例说明(以下代码虽然是随手写的,应该可以在VC和GCC下编译通过,大家可以运行下看什么效果,在VC下请加入这条语句,屏蔽4786警告
#pragma warning (disable:4786) )
#include <map>
#include <string>
#include <iostream>
Using namespace std;
Int main()
{
Map<int, string> mapStudent;
mapStudent.insert(pair<int, string>(1, “student_one”));
mapStudent.insert(pair<int, string>(2, “student_two”));
mapStudent.insert(pair<int, string>(3, “student_three”));
map<int, string>::iterator iter;
for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
{
Cout<<iter->first<<” ”<<iter->second<<end;
}
}
第二种:用insert函数插入value_type数据,下面举例说明
#include <map>
#include <string>
#include <iostream>
Using namespace std;
Int main()
{
Map<int, string> mapStudent;
mapStudent.insert(map<int, string>::value_type (1, “student_one”));
mapStudent.insert(map<int, string>::value_type (2, “student_two”));
mapStudent.insert(map<int, string>::value_type (3, “student_three”));
map<int, string>::iterator iter;
for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
{
Cout<<iter->first<<” ”<<iter->second<<end;
}
}
第三种:用数组方式插入数据,下面举例说明
#include <map>
#include <string>
#include <iostream>
Using namespace std;
Int main()
{
Map<int, string> mapStudent;
mapStudent[1] = “student_one”;
mapStudent[2] = “student_two”;
mapStudent[3] = “student_three”;
map<int, string>::iterator iter;
for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
{
Cout<<iter->first<<” ”<<iter->second<<end;
}
}
以上三种用法,虽然都可以实现数据的插入,但是它们是有区别的,当然了第一种和第二种在效果上是完成一样的,用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是插入数据不了的,但是用数组方式就不同了,它可以覆盖以前该关键字对应的值。

我想知道要覆盖std::map以前关键字对应的值,只能通过数组方式插入吗?
...全文
721 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
donwmufromdying 2008-07-04
  • 打赏
  • 举报
回复
还有:
value_type就是pair<Key, T>或者pair<const Key, T> 的typedef
所以你最好还是用value_type,或者key_type这些typedef出来的比较清楚些
donwmufromdying 2008-07-04
  • 打赏
  • 举报
回复
一般来说,想修改map里边某个key对应的value是不能使用 找到-〉修改这种操作的!
必须用删除旧的,重新插入新的
taodm 2008-07-04
  • 打赏
  • 举报
回复
没关系,等到你发现靠那么几小篇文章根本就还是“不会用”时再去找书也不迟。
大不了就不用stl。无数没学会用stl的都是得出结论说stl自己有问题,完全不能用。
biosli 2008-07-04
  • 打赏
  • 举报
回复

typedef map<int, string> MyMap;

bool changeValue (MyMap &myMap , const MyMap::key_type& key, const MyMap::referent_type& valueTemp)
{
MyMap::iterator iter = myMap.find(key);
if (iter != myMap.end())
{
(*iter).second = valueTemp;
return true;
}

return false;
}

int main()
{
MyMap mapStudent;

mapStudent[1] = "test1";
mapStudent[2] = "test2";
mapStudent[3] = "test3";

changeValue(mapStudent, 1,"over1");

cout<<mapStudent[1]<<endl;

system("pause");
}


不用那个也可以,至少不会再插入新的。
clever101 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 taodm 的回复:]
楼主啊,如果你真想学好stl呢,就去买本《STL Tutorial and Reference Guide》中文版吧。
map的使用不只这么简单几条的。
[/Quote]

实在不明白把stl搞那么复杂干吗?会用就行了......
taodm 2008-07-04
  • 打赏
  • 举报
回复
楼主啊,如果你真想学好stl呢,就去买本《STL Tutorial and Reference Guide》中文版吧。
map的使用不只这么简单几条的。
ouyh12345 2008-07-04
  • 打赏
  • 举报
回复
直接
some_map[key] = value;
如果没有此关键字,插入,否则修改值
K行天下 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 clever101 的帖子:]
在网上看到一篇文章:
在构造map容器后,我们就可以往里面插入数据了。这里讲三种插入数据的方法:
第一种:用insert函数插入pair数据,下面举例说明(以下代码虽然是随手写的,应该可以在VC和GCC下编译通过,大家可以运行下看什么效果,在VC下请加入这条语句,屏蔽4786警告
#pragma warning (disable:4786) )
#include <map>
#include <string>
#include <iostream>
Using namespace std;
Int main()
{

[/Quote]
可以删掉之后再重新insert
直接覆盖ms就只能是数组方式
Gob00st 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 clever101 的帖子:]
在网上看到一篇文章:
在构造map容器后,我们就可以往里面插入数据了。这里讲三种插入数据的方法:
第一种:用insert函数插入pair数据,下面举例说明(以下代码虽然是随手写的,应该可以在VC和GCC下编译通过,大家可以运行下看什么效果,在VC下请加入这条语句,屏蔽4786警告
#pragma warning (disable:4786) )
#include <map>
#include <string>
#include <iostream>
Using namespace std;
Int main()
{
Map <int, …
我想知道要覆盖std::map以前关键字对应的值,只能通过数组方式插入吗?
[/Quote]

ms确实只有数组方式可以直接修改已经存在key的值
不然就只有delete 再 insert 了

Row_Li 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 clever101 的回复:]
引用 6 楼 taodm 的回复:
没关系,等到你发现靠那么几小篇文章根本就还是“不会用”时再去找书也不迟。
大不了就不用stl。无数没学会用stl的都是得出结论说stl自己有问题,完全不能用。



你错了,我没说stl有问题。我是说学习stl的重点应该放在使用上,而不是像孔乙己那样探究茴字有几种写法。
[/Quote]

你只有了解其内部机制,才能写出高效的代码出来吧,呵呵,个人理解!
clever101 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 taodm 的回复:]
没关系,等到你发现靠那么几小篇文章根本就还是“不会用”时再去找书也不迟。
大不了就不用stl。无数没学会用stl的都是得出结论说stl自己有问题,完全不能用。
[/Quote]


你错了,我没说stl有问题。我是说学习stl的重点应该放在使用上,而不是像孔乙己那样探究茴字有几种写法。

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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