/*
*
********************************************
* multiset多重集合容器的基础说明:
********************************************
*
* multiset多重集合容器使用RB-Tree的平衡二叉检索树的数据结构。
* 允许将重复键值的元素插入到multiset中
* 插入过程中要进行平衡处理,但检索过程效率高
*
* 提供了元素插入、删除、检索的功能
* Sorted Associative Container Simple Associative Container Multiple Associative Container
*
* 使用multisetr必须使用宏语句#include
*
**************************************************************************************
*
* 创建multisetr对象:
* template < class Key, class Compare=less
*
* 1.multisetr
* 2.multisetr(const key_compare& comp) //指定一个比较函数对象comp来创建set对象,详细使用见main()中示例
* 3.multisetr(const multisetr&); //multisetr
* 4.multisetr(first,last); //multisetr
* 5.multisetr(first,last,const key_compare& comp); //依据comp函数进行插入排序
**************************************************************************************
*
* 元素的插入
* iterator insert(const value_type& v); //不再是返回pair,而是插入的迭代器位置
* iterator insert(iterator pos,const value_type& v);
* void insert(first,last);
*
**************************************************************************************
*
* 元素的删除
* void erase(iterator pos);
* size_type erase(const key_type& k); //删除等于键值k的元素
* void erase(first,last); //删除[first,last)区间的元素
* void clear();
*
**************************************************************************************
*
* 访问与搜索
*
* iterator begin();iterator end(); //企图通过迭代器改变元素是不被允许的
* reverse_iterator rbegin();reverse_iterator rend();
*
* iterator find(const key_type& k) const;
* pair
* //first为lower_bound(k);大于等于k的第一个元素位置
* //second为upper_bound();大于k的第一个元素位置
*
* 其它常用函数
* bool empty() const;
* size_type size() const;
* size_type count(const key_type& k) const; //返回键值等于k的元素个数
* void swap();
*
* //main中包含了一下函数的简单例子
* iterator lower_bound();iterator upper_bound();pair
*
*
*
********************************************
** cumirror ** [email protected] ** **
********************************************
*
*/
#include
#include
// 自定义数据的插入
struct student{
char name[20];
int age;
char city[20];
char phone[20];
};
// 这里采用函数对象的方式设置,与set中有不同,key设置为city,注意应设置为public
class stuCmp{
public:
bool operator()(const student& a,const student& b) const{
return strcmp(a.city,b.city)<0;
}
};
// 对于一些基本数据类型,如int,string等可参照set
int main(){
using namespace std;
student stu1={"童进",23,"长沙","XXX"};
student stu2={"老大",28,"武汉","XXX"}; //老大,你成熟了5岁,哈哈
student stu3={"饺子",23,"福州","XXX"};
// multiset
multiset
b.insert(stu1);
b.insert(stu2);
b.insert(stu3);
// 武汉同学最多,只是现在大家又都天各一方
student stu4={"小芳",23,"武汉","XXX"};
student stu5={"黄庆",23,"武汉","XXX"};
student stu6={"英俊",23,"武汉","XXX"};
b.insert(stu4);
b.insert(stu5);
b.insert(stu6);
for(multiset
cout<
student key={"",99,"武汉","XXX"};
cout<<"武汉朋友数目:"<
cout<
// 验证set中的猜测,此时键值为city // 元素搜索
student test={"路人甲",99,"武汉","XXX"};
multiset
cout<<"寻找武汉的路人甲:"<
cout<<"搜索武汉的朋友们:"<
for(multiset
cout<
return 0;
}