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

    xiaoxiao2021-11-29  22

    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; }
    转载请注明原文地址: https://ju.6miu.com/read-678606.html

    最新回复(0)