1、 键盘输入若干整数,分别插入set和multiset,并显示它们;
2、 键盘输入整数x、y,要求(x<=y),使用lower_bound和upper_bound分别求出[x,y]间的所有整数并输出;
3、 对两个集合,删除[x,y]间数据;
4、 建立map< string , int > m,插入下列数据,显示结果:
student_one 1
student_three 3
student_two 2
student_one 10
要求分别使用inert和 [] 实现插入。
附:pair的使用:
pair <T1,T2 p1(v1,v2); //用v1、v2构造一pair对象p1
pair <T1,T2>(v1,v2); //用v1、v2构造一临时pair对象
make_pair(v1,v2); //用v1、v2生成一临时pair对象
5、练习查询类成员函数的使用,包括下列成员函数。
(1) find
(2) equal_range
(3) count
源代码:
#include <iostream>
#include <set>
#include <iterator>
#include <vector>
#include <map>
using namespace std;
void display_set(set<int>& s);
void display_multiset(multiset<int>& s);
void main()
{
vector <int> v;
set<int> myset;
multiset<int> mymultiset;
/* 键盘输入若干整数,分别插入set和multiset,并显示它们*/
copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(v));
for (int i = 0; i < v.size(); i++)
{
mymultiset.insert(v[i]);
}
for (int i = 0; i < v.size(); i++)
{
myset.insert(v[i]);
}
cout << "myset集合:" << endl;
display_set(myset);
cout << endl;
cout << "mymultiset集合:" << endl;
display_multiset(mymultiset);
cout << endl << endl;
/*键盘输入整数x、y,要求(x<=y),对上面的两个集合使用lower_bound和upper_bound分别求出[x,y]间的所有整数并输出;*/
int set_x;
int set_y;
int multiset_x;
int multiset_y;
pair<set<int>::iterator, set<int>::iterator> rangeset;
pair<multiset<int>::iterator, multiset<int>::iterator> rangemultiset;
cout << "输入整数 x = 2" << endl; /*cin >> set_x;*/
set_x = 2;
cout << "输入整数 y = 4" << endl; /*cin >> set_y;*/
set_y = 4;
rangeset.first = myset.lower_bound(set_x);
rangeset.second = myset.upper_bound(set_y);
set<int>::iterator set_t;
cout << "set [x,y]间的所有整数并输出 : " << endl;
for (set_t = rangeset.first; set_t != rangeset.second; set_t++)
{
cout << *set_t << "\t";
}
cout << endl << endl;
cout << "输入整数 x = 2" << endl; /*cin >> set_x;*/
multiset_x = 2;
cout << "输入整数 y = 4" << endl; /*cin >> set_y;*/
multiset_y = 4;
rangemultiset.first = mymultiset.lower_bound(multiset_x);
rangemultiset.second = mymultiset.upper_bound(multiset_y);
multiset<int>::iterator multiset_t;
cout << "multiset [x,y]间的所有整数并输出 : " << endl;
for (multiset_t = rangemultiset.first; multiset_t != rangemultiset.second; multiset_t++)
{
cout << *multiset_t << "\t" ;
}
cout << endl << endl;
/*对两个集合,删除2题得到的[x,y]间数据;*/
cout << "set对两个集合,删除2题得到的[x,y]间数据" << endl;
myset.erase(rangeset.first, rangeset.second);
cout << "myset集合:" << endl;
display_set(myset);
cout << endl;
cout << "multiset_t对两个集合,删除2题得到的[x,y]间数据" << endl;
mymultiset.erase(rangemultiset.first, rangemultiset.second);
cout << "mymultiset集合:" << endl;
display_multiset(mymultiset);
cout << endl << endl;
/*建立map< string , int > m,插入下列数据,显示结果:*/
map<string, int> m;
pair<string, int> m1("student_one", 1);
m.insert(m1);
//用v1、v2构造一pair对象m1
m.insert(pair<string, int> ("student_three", 3));
//用v1、v2构造一临时pair对象
m.insert(make_pair("student_two", 2));
//用v1、v2生成一临时pair对象
m["student_one"] = 10;
//使用[] 实现插入
int m_1 = m["student_one"];
if (m_1 > 0)
{
cout << "student_one 是" << m_1 << endl;
}
else { cout << "student_one 没有!" << endl; }
/*在基础上,练习查询类成员函数的使用(find 、equal_range、 count )*/
set<int>::iterator set_find = myset.find(3);
//返回等于3的迭代器;
pair<multiset<int>::iterator, multiset<int>::iterator> set_equal_range;
set_equal_range = myset.equal_range(3);
//返回2个迭代器
int nCount = myset.count(3);
cout << "nCount = " << nCount << endl;
//返回3的个数
system("pause");
}
void display_multiset(multiset<int>& s)
{
multiset<int>::iterator te = s.begin();
while (te != s.end())
{
cout << *te << "\t";
te++;
}
cout << endl;
}
void display_set(set<int>& s)
{
set<int>::iterator te = s.begin();
while (te != s.end())
{
cout << *te << "\t";
te++;
}
cout << endl;
}