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)介绍。

参数


       需要查找的键值。

        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


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐