持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情
1.1 map查找和统计
功能描述:
- 对map容器进行查找数据以及统计数据
1.2 函数原型:
find(key);//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();count(key);//统计key的元素个数
1.3 代码示例:
#include <map>
//查找和统计
void test01()
{
map<int, int>m;
m.insert(pair<int, int>(1, 10));
m.insert(pair<int, int>(2, 20));
m.insert(pair<int, int>(3, 30));
//查找
map<int, int>::iterator pos = m.find(3);
if (pos != m.end())
{
cout << "找到了元素 key = " << (*pos).first << " value = " << (*pos).second << endl;
}
else
{
cout << "未找到元素" << endl;
}
//统计
int num = m.count(3);
cout << "num = " << num << endl;
}
int main() {
test01();
system("pause");
return 0;
}
1.4 总结:
- 查找 --- find (返回的是迭代器)
- 统计 --- count (对于map,结果为0或者1)
1.5 std::map 插入的2种方式比较:
insert: map.insert(std::makepair(key,value));
map[key]=value;
区别:
1. 第一种方式,遍历map,如果没找到key,则插入,否则不插入。
2. 第二种方式,如果没找到则插入,否则将对应的key项的值赋给value。
你可能觉得,第二种方式多好,找不到就插入,比第一种靠谱多了。第二种方式确实更靠谱,但是比起第一种方式,它的代价会更大,这种靠谱是要花时间的。
尤其在遇到value为对象的情况时,就需要好好考虑了。
因为第二种方式相当于是:系统先默认构造一个对象,然后给它赋值,最后还要销毁它(3部分时间)。如果用想要的value赋给对象,显然比默认构造一个对象再赋值更高效。这就是insert。
当对象内属性很多时就更应该考虑了。
具体insert的返回值,可以再深入了解下,比如插入是否成功。
返回值为一个pair,pair构成一个迭代器,一个bool变量,bool变量标识是否插入成功,iterator指向插入成功的map元素。