pair类型:
pair<T1,T2> p1;创建一个空的pair对象,它的两个元素分别是T1和T2类型。
pair<T1,T2> p1(v1,v2);
make_pair(v1,v2);
p1<p2;其定义遵循字典次序:如果p1.first<p2.first 或者 !(p2.first<p1.first) && p1.second<p2.second,则返回true.
p1==p2;
p1.first;//返回p1中名为first的公有数据成员。
p1.second;
与其他标准库类型不同,pair类可以直接访问其数据成员;其成员都是公有的,分别命名为first和second.只需使用点操作符。
map类型:
map的构造函数:
map<k,v> m//一个空的map对象,其键类型为k,值类型为v。
map<k,v> m(m2)//创建m2的副本m.
map<k,v> m(b,e)//创建m.存储迭代器b和e标记的范围内所有元素的副本。
map键类型的约束:在使用关联容器时,它的键不但有一个类型,而且还有一个相关的比较函数。
map类定义的类型:
map<k,v>::key_type //在map中用作索引的键的类型
map<k,v>::mapped_type //在map中键所关联的值的类型
map<k,v>::value_type //一个pair类型,它的first元素具有const map<k,v>::key_type类型,而second元素则为map<k,v>::mapped_type类型、
谨记住value_type是pair类型,它的值成员可以修改,但键成员不能修改。
map添加元素:
当使用下标访问map对象时,如:
map<string,int> word_count;
word_count["Anna"] = 1;如果在word_count中没有找到Anna的键,则map会新创建一个键值为Anna的对象,比赋值为1.
m.insert(e);//e是一个value_type类型的值。如果e.first不在m中,则插入一个值为e.second的新元素;如果该键在m中已存在,则保持m不变。该函数返回一个pair类型的对象,包含指向键为e.first的元素的map迭代器,以及一个bool类型的对象,表示是否插入了该元素。
m.insert(beg,end);
m.insert(iter,e);
map对象中一个给定键只对应一个元素。如果试图插入的元素所对应的键已在容器中,则insert将不做任何操作。
//单词统计程序
string str;
map< string,int> word_count;
while(cin>>str)
{
pair< map<string,int>::iterator,bool> pir = word_count.insert(make_pair(str,1));
if(!pir.second)
{
++pir.first->second ;
}
}
不修改map对象的查询操作:
m.count(k);//返回m中k的出现次数,只可能是0和1.
m.find(k);//如果m容器中存在k索引的元素,则返回指向该元素的迭代器。如果不存在,则返回超出末端的迭代器。
int occurs = 0;
map<string,int>::iterator it = word_count.find("jch");
if(it!=word_count.end())
{
occurs = (*it).second;
}
map对象中删除元素:
m.erase(k);//删除m中键为k的元素。返回size_type类型,表示删除的个数。
m.erase(p);//从m中删除迭代器p所指向的元素。返回void类型。
m.erase(b,e);//从m中删除一段范围内的元素,该范围由迭代器对b和e标记。
和不能修改map中元素的键部分一样,set中的键也为const。在获得指向set中某元素的迭代器后,只能对其做读操作,而不能对其做写操作。
set.insert(k);
set.find(k);
set.count(k);