您的位置:首页 > 其它

std::map的一些常见用法和个别注意事项

2015-05-19 11:12 225 查看
声明:这篇文章中有参考引用(已表明)。

1、map中添加元素

首先map中的键值(key)存入的时候是以常量的类型存入的,我们可以从map的成员函数value_type看出。

typedef pair<const Key, Type> value_type;(A type that represents the type of object stored as an element in a map.)

所以接下来的几中添加元素的方式就需要注意了:

map<string, int> grade_map;

① grade_map.insert(pair<string, int>("Math", 90));//添加元素时需要强转

② grade_map.insert(make_pair("Chinese", 88));//添加元素时需要强转

③ grade_map.insert(map<string, int>::value_type("English", 85));//添加元素时不需要强转

④ grade_map["C++"] = 90;//添加元素时需要强转

注意: 如果map中已经有了对应key,那么insert操作将失败,也不会给此键值对应的映射value赋值。

但是第④种方式有所不同,没有此键值则添加,有此键值则重新赋值。

map中的2个值:key_type;(键值)

value_type;(pair对)

2、map中删除元素

map::erase(); 删除指定元素或者指定范围元素。

map::clear();删除所有元素。

map<string, int>::iterator itr = grade_map.begin();

while (itr != grade_map.end())

{

if ("Math" == itr->first)

{

grade_map.erase(itr++);//先对迭代器加1,然后再删除。这样可以防止迭代器失效

}

else

itr++;

}

注意:map中删除元素时,只是当前迭代器失效。

3、map常用函数

begin();end();

find();没找到返回尾后迭代器,找到了返回对应键值的迭代器。

empty();为空,返回true。

count(key);有对应元素返回1,没有对应元素返回0。

size();返回当前map中元素的个数。

4、运用map[ ](插入运算符),(顾名思义这个运算符最好用在插入软塑时)

map[key ],如果没有此键值,则在对应键值位置构造一个默认初始化的value。

所以用这个插入符取值的时候,首先要判断map中是否有此键值,在有的情况下使用比较安全。

如:(下面这一段是参考别人的,没有找到原创地址,就加一个转载地址吧:http://blog.csdn.net/nxx_168/article/details/7670757)

str_map[5] = "ee";

这条语句实际上是分两个步骤执行的:

先在str_map[5]的地方构造一个空string,然后通过str_map[5]返回这个string的reference;

然后调用这个空string的assignment运算符,把"ee"赋给它。

因此,这样写要比直接insert效率低些。

索引还有一个问题是需要注意的:

map<int, string> m;

cout<<m.size()<<endl; // output: 0

if ( m[4] == "aa" )

some_operation();

cout<<m.size()<<endl; //output: 1

这里m[4]已经指向了一个构造好了的空string
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: