multiset是容器中的一种,与set相比,可以插入相同的元素。其他地方和set几乎一模一样,可以看看set,见下面链接。
2019年02月28日 更新....
注:multiset容器有重复值,有时需要仅删除重复值的一个,例如,1 2 2 3,想要删除一个2。不能简单的使用s.erase(2),而是用
s.erase(s.lower_bound(2)),已添加至代码
代码:/**********
author:YuBo
Date:2018/1/29
mutiset
***********/
#include<iostream>
#include<set>
using namespace std;
multiset<int> s;
multiset<int>::iterator it;
multiset<int>::reverse_iterator rit;
void menu()
{
cout<<"**********1.插入 2.查找**********"<<endl;
cout<<"**********3.删除 4.显示**********"<<endl;
cout<<"**********5.退出"<<endl;
}
void Add()
{
int i;int n;int N;
cout<<"请输入你要输入的整数个数:"<<endl;
cin>>N;
cout<<"请输入"<<N<<"个整数:"<<endl;
for(i=0;i<N;i++)
{
cin>>n;
s.insert(n);
}
}
void Find()
{
int n;
cout<<"请输入要查找的数:"<<endl;
cin>>n;
it=s.find(n);
if(it!=s.end())
cout<<*it<<endl;
else
cout<<"没找到!"<<endl;
}
void Delete()
{
int i;int place;int val;
cout<<"*******1.删除某位置元素 2.删除某个值的全部元素*******"<<endl;
cout<<"*******3.删除某个值的一个元素 4.清空所有元素***************"<<endl;
cin>>i;
switch(i)
{
case 1:{
cout<<"请输入要删除第几个元素(首元素为0):"<<endl;
cin>>place;
it=s.begin(); //迭代器指向开头第一个
while(place){
it++;
place--;
}//找位置
int ss=*it;//把值给个暂时的变量,其实和删除确定值一样,只不过找到位置而已
s.erase(ss); //删除该元素
}break;
case 2:{
cout<<"请输入该值:"<<endl;
cin>>val;
s.erase(val);
}break;
case 3: {
cout << "请输入该值:" << endl;
cin >> val;
s.erase(s.lower_bound(val));
}break;
case 4:s.clear();break;
default:cout<<"输入错误!"<<endl;
}
}
void Display()
{
int i;
cout<<"*******1.升序输出 2.降序输出*******"<<endl;
cin>>i;
switch(i)
{
case 1:
{
for(it=s.begin();it!=s.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}break;
case 2:
{
for(rit=s.rbegin();rit!=s.rend();rit++)
{
cout<<*rit<<" ";
}
cout<<endl;
}break;
}
}
int main()
{
int i;
while(1)
{
menu();
cout<<"请输入菜单号:"<<endl;
cin>>i;
if(i==5)break;
switch(i)
{
case 1:Add();break;
case 2:Find();break;
case 3:Delete();break;
case 4:Display();break;
default:cout<<"输入错误!";break;
}
}
return 0;
}
运行截图:
更多STL例子:C++ STL的使用
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。