第二十三模板 18.3关联容器

//第二十三模板 18.3关联容器
/*顺序容器可使用下标或者迭代器对元素进行顺序或者随机访问,但是不能使用关键值对关键元素进访问
关联容器弥补了这个缺点,关联容器可以使用关键字对关键元素进行访问
标准C++库提供了四个关联容器,映射 多重映射 集合和多重集合*/

//1映射
//标准映射容器类maps要关联容器的一种
/*
begin()    返因指向map头部的迭代器
clear()    删除所有元素
count()    返回指定元素出现的次数
empty()    如果map为空由返回true
end()      返回指向map末尾的迭代器
equal_range()返回特殊条目的迭代器对
erase()    删除一个元素
find()     查找一个元素
get_allocator()  返回map的配置器
insert()   插入元素
key_comp()  返回比较元素key的函数
lower_bound()  返回键值>=给定元素的第一个位置
max_size()   返回可以容红领巾的最大元素个数
rbegin()     返回一个指向map尾部的逆向迭代器
rend()       返回一个指向map头部的逆向迭代器
size()       返回map中元素的个数
swap()       交换两个map
upper_bound()  返回键值>给定元素的第一个位置
value_comp()   返回比较元素value的函数
*/

//map类的方insert()该方法被重载了三次
//iterator insert(iterator pos, const pair<KEY_TYPE,VALUE_TYPE> &val)
//原型插入val到pos的后面,然后返回一个指向这个元素的迭代器

//void insert(input_iterator start, input_iterator end);
//原型插入start到end的元素到map中

//pait<iterator, bool> insert(const pair<KEY_TYPE,VALUE_TYPE>&val)
//原型只有在val不存在时插入val,返回值是一个指向被插入元素的迭代器和一个描述是否插入的bool值


//如何根据关键字搜索关联值
//iterator find(const key_type& k)
//const_iterator find(const key_type& k)const;
/*
#include <iostream>
#include <map>
#include <string>
using namespace std;
typedef map<string,string>::const_iterator CIT;
typedef map<string,string>::value_type cit;
template<class T1, class T2>
void show(CIT &c, map<T1,T2>&n)
{
	for(c=n.begin(); c!=n.end(); ++c){
		cout<<c->first<<"\t"<<c->second<<endl;
	}
}
int main()
{
    string str="武汉";
	map<string,string>name,name1;
	name["范伟"]=str;
	name1["朱若军"]="青岛";
	name1.insert(name1.end(),cit("朱然","长春")); //将cit插入到name1的尾处
	name.insert(name1.begin(),name1.end()); //将name1从开始到结束插入到name中
	cout<<"映射容器name中共有"<<name.size()<<"个元素"<<endl;
	CIT cit;
	show(cit,name);

	cout<<"查找关键字为'朱然'的所有内容并输出"<<endl;
	cit = name.find("朱然");
	if(cit == name.end()){
	     cout<<"对不起,没有这个关键字"<<endl;
	}else{
		cout<<cit->first<<"\t"<<cit->second<<endl;
	}
	cout<<"关键字等于'范伟'的元素的个数为:"<<name.count("范伟")<<endl;
	cout<<"删除关键字为'范伟'的所有元素"<<endl;
	name.erase("范伟");
	cout<<"再次输出映射容器name中的所有元素"<<endl;
	show(cit,name);

	cout<<"删除映射容器name中所有元素"<<endl;
	name.clear();
	if(name.empty())
	{
	     cout<<"映射容器name为空"<<endl;
	}else{
	     show(cit,name);
	}
	system("pause");
	return 0;
}*/

//2集合
//set联合容器,或者称为集合,这些数据的值必须是唯一的,这一点与映射容器map很相似,但不同的是set关键字等于数据,map则将关键字与数据分开了,而set容器中的数据都是经过排序后的
/*
begin()    返回指向第一个元素的迭代器
clear()    清除所有元素
count()    返回某个值元素的个数
empty()    如果集合为空,返回true
end()      返回指向最后一个元素的迭代器
equal_reange()  返回集合与给定值相等的上下限的两个迭代器
erase()    删除集合中的元素
find()     返回一个指向被查找到元素的迭代器
get_allocator()  返回集合的分配器
insert()   在集合中插入元素
lower_bound()  返回指向大于(或等于)某值的第一个元素的迭代器
key_comp()     返回一个用于元素间值比较的函数
max_size()     返回集合通容纳的元素的最大限值
rbegin()       返回指向集合最后一个元素的返回迭代器
rend()         返回指向集合中第一个元素的返向迭代器
size()         集合中元素的数目
swap()         交换两个集合变量
upper_bound()  返回大于某个值元素的迭代器
value_comp()    返回一个用于比较元素间的值的函数
*/
/*
#include <iostream>
#include <iterator>
#include <set>
#include <string>
using namespace std;
typedef set<string>::const_iterator CIT;
template<class T>
void show(CIT&it, set<T>&s)
{
	for(it = s.begin(); it!=s.end(); ++it)
	{
	    cout<<*it<<"\t";
	}
	cout<<endl;
}
int main()
{    
	const int N=5;
	string s1[N]={"Mick","Bill","Gate","Rose","Jane"};
	string s2[N]={"张锋","秦平","李力","陆放","胡涛"};
	set<string>name1;
	name1.insert(s1,s1+N);
	set<string>name2(s2,s2+N);
	CIT it;
	cout<<"输出name1中各个元素:"<<endl;
	show(it,name1);
	cout<<"输出name2中各个元素"<<endl;
	show(it,name2);
	cout<<"查找name1中大于或者等于关键字'李力'的第一个元素"<<endl;
	it = name2.lower_bound("李力");
    cout<<*it<<endl;
	cout<<"查找name1中大于关键字李力'的第一个元素"<<endl;
	it = name2.upper_bound("李力");
	cout<<*it<<endl;
	system("pause");
	return 0;
}*/

  

posted @ 2012-10-04 20:00  简单--生活  阅读(155)  评论(0编辑  收藏  举报
简单--生活(CSDN)