[熟悉set、map的各种操作]

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值