map/multimap/set/multiset 简介
map/multimap都是以key/value对的方式存储数据的,通过key即可查找到对应的value,二者区别,前者的key不可以重复,后者可以重复。
set/multiset每个元素只是以一个实值存在,前者不允许重复,后者允许重复。
map/multimap 构造函数
void MapDefine() {
// 定义空对象
typedef pair int_pair;
pair
map/multimap 常用方法
void MapProperty() {
typedef pair i_pair;
pair
void MapMethods() {
typedef pair i_pair;
map mp1,mp2;
mp1.insert(i_pair(11, 'a'));
mp1.insert(i_pair(22, 'b'));
mp1.insert(i_pair(33, 'c'));
mp1.insert(i_pair(44, 'd'));
for_each(mp1.begin(), mp1.end(), fun);// a b c d
/*
void erase( iterator pos );
void erase( iterator start, iterator end );
size_type erase( const KEY_TYPE &key );
*/
cout << "--------------" << endl;
// erase()
mp1.erase(mp1.begin()++);
for_each(mp1.begin(), mp1.end(), fun);// 输出 b c d
// swap()
cout << "--------------" << endl;
mp2.insert(i_pair(11, 'w'));
mp2.insert(i_pair(22, 'x'));
mp2.insert(i_pair(33, 'y'));
mp2.insert(i_pair(44, 'z'));
mp1.swap(mp2);
for_each(mp1.begin(), mp1.end(), fun);
// clear()
cout << "--------------" << endl;
mp1.clear();
cout << mp1.size() << endl;
}
void MapEqualRange() {
typedef pair i_pair;
multimap mp1;
mp1.insert(i_pair(11, 'a'));
mp1.insert(i_pair(11, 'b'));
mp1.insert(i_pair(22, 'c'));
mp1.insert(i_pair(11, 'o'));
mp1.insert(i_pair(11, 'p'));
mp1.insert(i_pair(11, 'q'));
mp1.insert(i_pair(33, 'w'));
mp1.insert(i_pair(44, 'y'));
for_each(mp1.begin(), mp1.end(), fun);// 会按照key自动排序输出
cout << "------------" << endl;
// equal_range()
/*
理解equal_range:一个multimap中(存在重复key),所有元素的区间为[first,last],因所有元素会自动按照key排序,所以存在一个区间[i,j],
区间内的所有key必然相同(对应的value可能不同),lower_bound()返回的iterator指向所查找key的第一个元素(i的位置),upper_bound()返回
的是所查找key最后一个元素的下一个位置(j+1),因此如下会输出a c。而equal_range()方法则以pair的方式把两个iterator返回。
*/
pair
未完待续