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

声明:这篇文章中有参考引用(已表明)。


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章