我是靠谱客的博主 单纯玉米,最近开发中收集的这篇文章主要介绍C++关联容器-map[ ]=与insert操作不同,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

对于STL中的map,插入有两种方法:
1、map a;
     a[1 ]=1   //此方法初始化a[1],并给a[1]赋值。
     a[1]=2   //此方法修改了a[1的值。
2 map a;
    a.insert(map::value_type(1,1)); //此方法初始化a[1],并给a[1]赋值。
   a.insert(map::value_type(1,2)); //因为a[1]已经存在,此方法不能初始化a[1],也不能修改a[1]的值。
3 特别注意的是,因为[ ]被重载为,如果不存在该key的值,则创建该对象,所以,一下操作比较危险。
    map word_count;
    int ccurs = word_count["foobar"]; //键“ foobar ”不在 map 容器中,那么下标操作会插入一个具有该键的新元素。


map 对象中一个给定键只对应一个元素。如果试图插入的元素所对应的键已在容器中,则 insert 将不做任何操作。含有一个或一对迭代器形参的 insert 函数版本并不说明是否有或有多少个元素插入到容器中。

但是,带有一个键-值 pair 形参的 insert 版本将返回一个值:包含一个迭代器和一个 bool 值的 pair 对象,其中迭代器指向 map 中具有相应键的元素,而 bool 值则表示是否插入了该元素。如果该键已在容器中,则其关联的值保持不变,返回的 bool 值为 true。在这两种情况下,迭代器都将指向具有给定键的元素。下面是使用 insert 重写的单词统计程序:

// count number of times each word occurs in the input
map word_count; // empty map from string to int
string word;
while (cin >> word) {
// inserts element with key equal to word and value 1;
// if word already in word_count, insert does nothing
pair::iterator, bool> ret =
word_count.insert(make_pair(word, 1));
if (!ret.second) // word already in word_count
++ret.first->second; // increment counter
}

下标操作符给出了读取一个值的最简单方法:

map word_count;
int ccurs = word_count["foobar"];
但是,使用下标存在一个很危险的副作用:如果该键不在 容器中,那么下标操作会插入一个具有该键的新元素。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16856446/viewspace-626583/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16856446/viewspace-626583/

最后

以上就是单纯玉米为你收集整理的C++关联容器-map[ ]=与insert操作不同的全部内容,希望文章能够帮你解决C++关联容器-map[ ]=与insert操作不同所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部