STL学习之map容器(3)
map::finditerator find ( const key_type& x );const iterator find( const key_type& x) const;获取元素的迭代器获取map容器中指定键值x的元素,如果找到,返回此元素的迭代器,否则返回map::end()的迭代器(即查找到容器的末尾都没有找到此元素)。前面章节介绍的map::count成
map::find
iterator find ( const key_type& x );
const iterator find( const key_type& x) const;
获取元素的迭代器
获取map容器中指定键值x的元素,如果找到,返回此元素的迭代器,否则返回map::end()的迭代器(即查找到容器的末尾都没有找到此元素)。
前面章节介绍的map::count成员函数也可以有类似的功能,详见STL学习之map容器(1)介绍。
参数
x
需要查找的键值。
Key_type是map容器定义的作为Key别名的一个成员类型。
返回值
指向元素的迭代器,如果指定的键值找到,返回找到元素的迭代器或者指定的键值没有找到返回map::end。
实例:
#include <iostream>
#include <map>
using namespace std;
int main(void)
{
map<char, int> mymap;
map<char, int>::iterator it;
mymap['a'] = 50;
mymap['b'] = 100;
mymap['c'] = 150;
mymap['d'] = 200;
it = mymap.find('b');
mymap.erase(it);
mymap.erase(mymap.find('d'));
cout << "mymap contains:" << endl;
for (it = mymap.begin(); it != mymap.end(); ++it)
cout << (*it).first << "=>" << (*it).second << endl;
cout << " elements in mymap:" << endl;
cout << " a=> " << mymap.find('a')->second << endl;
cout << " b=> " << mymap.find('b')->second << endl;
cout << " c=> " << mymap.find('c')->second << endl;
cout << " d=> " << mymap.find('d')->second << endl;
return 0;
}
执行结果:
liujl@liujl-Rev-1-0:~/mycode/STL$ g++ map_find.cpp -o map_find
liujl@liujl-Rev-1-0:~/mycode/STL$ ./map_find
mymap contains:
a=>50
c=>150
elements in mymap:
a=> 50
b=> -1076412860 //不存在
c=> 150
d=> -1076412860 //不存在
map::erase
void erase( iterator postion );
size_type erase( const key_type& x );
void erase( iterator first, iterator last );
删除元素
从map容器中删除一个元素或者一个区间的元素([first, last));
参数
postion
指向被map容器中删除元素迭代器指针。
iterator是一个成员类型,定义作为双向迭代器类型。
x
从map容器中移除的元素值。
first,last
指定迭代器区间[first,last),需要从map容器中删除的区间。
返回值
仅第二个版本,函数返回需要删除的元素个数。
实例:
// erasing from map
#include <iostream>
#include <map>
using namespace std;
int main ()
{
map<char,int> mymap;
map<char,int>::iterator it;
// insert some values:
mymap['a']=10;
mymap['b']=20;
mymap['c']=30;
mymap['d']=40;
mymap['e']=50;
mymap['f']=60;
it=mymap.find('b');
mymap.erase (it); // erasing by iterator
mymap.erase ('c'); // erasing by key
it=mymap.find ('e');
mymap.erase ( it, mymap.end() ); // erasing by range
// show content:
for ( it=mymap.begin() ; it != mymap.end(); it++ )
cout << (*it).first << " => " << (*it).second << endl;
return 0;
}
执行结果:
liujl@liujl-Rev-1-0:~/mycode/STL$ g++ map_erase.cpp -o map_erase
liujl@liujl-Rev-1-0:~/mycode/STL$ ./map_erase
a => 10
d => 40
map::lower_bound
iterator lower_bound( const key_type& x );
const iterator lower_bound( const key_type& x ) const;
返回指向下界的迭代器
返回一个指向容器中第一个键值大于或者等于x元素迭代器。
map::upper_bound
iterator upper_bound( const key_type& x );
const iterator upper_bound( const key_type& x ) const;
返回指向上界的迭代器
返回一个指向容器中第一个键值大于x元素迭代器。
从定义中可以看到upper_bound和lower_bound区别。
upper_bound和lower_bound参数
x
比较的键值。
实例:
#include <iostream>
#include <map>
using namespace std;
int main(void)
{
map<char, int> mymap;
map<char, int>::iterator it, itlow, itup;
mymap['a'] = 20;
mymap['b'] = 40;
mymap['c'] = 60;
mymap['d'] = 80;
mymap['e'] = 100;
itlow = mymap.lower_bound('b');
itup = mymap.upper_bound('d');
mymap.erase(itlow, itup);
for( it= mymap.begin(); it != mymap.end(); ++it)
cout << (*it).first << "=>" << (*it).second << endl;
return 0;
}
执行结果:
liujl@liujl-Rev-1-0:~/mycode/STL$ g++ map_bound.cpp -o map_bound
liujl@liujl-Rev-1-0:~/mycode/STL$ ./map_bound
a=>20
e=>100
更多推荐
所有评论(0)