本篇开始学习multiset,与set相比,multiset可以有多个相关的关键字,其它也set的功能一样,下面我们先来学习它的创建,初始化,赋值操作operator=, empty,size等相关操作。

代码示例:

#include <iostream>
#include <set>
#include <string>
#include <functional>
#include <cmath>using namespace std;bool fncomp_greater (int lhs, int rhs) {return lhs > rhs;}bool fncomp_less (int lhs, int rhs) {return lhs < rhs;}struct classcomp_less {bool operator() (const int& lhs, const int& rhs) const{return lhs < rhs;}
};struct classcomp_greater {bool operator() (const int& lhs, const int& rhs) const{return lhs > rhs;}
};struct Point { int x, y; };
struct PointCmp_greater {bool operator()(const Point& lhs, const Point& rhs) const {return std::hypot(lhs.x, lhs.y) > std::hypot(rhs.x, rhs.y);//hypot计算三解形的斜边长}
};
struct PointCmp_less {bool operator()(const Point& lhs, const Point& rhs) const {return std::hypot(lhs.x, lhs.y) < std::hypot(rhs.x, rhs.y);}
};void multisetInit()
{//1.创建multisetstring strVal[] = {"first", "second", "three", "fifth"};multiset<string> set1(strVal, strVal + 4);cout << "set1.size = " << set1.size() << " set1.empty = " << set1.empty() << " set1.max_size = " << set1.max_size() << endl;cout << "set1.size = " << set1.size() << " set1.empty = " << set1.empty() << " set1.max_size = " << set1.max_size() << endl;cout << "set1的值为:  ";multiset<string>::iterator iter1;for(iter1 = set1.begin(); iter1 != set1.end(); iter1++){cout << *iter1 << "\t";}cout << endl;//2.列表初始化multiset<int> set2 = {1, 2, 3, 4};cout << "set2.size = " << set2.size() << " set2.empty = " << set2.empty() << " set2.max_size = " << set2.max_size() << endl;cout << "set2的值为:  ";for(auto &val: set2){cout << val << "\t";}cout << endl;//3.赋值初始化multiset<int> set3 = set2;cout << "set3的值为:  ";for(auto &val: set3){cout << val << "\t";}cout << endl;//4.拷贝初始化multiset<string> set4(set1);cout << "set4.size = " << set4.size() << " set4.empty = " << set4.empty() << " set4.max_size = " << set4.max_size() << endl;cout << "set4的值为:  ";for(auto &val: set4){cout << val << "\t";}cout << endl;//5.范围初始化multiset<int> set5(set2.begin(), set2.end());cout << "set5.size = " << set5.size() << " set5.empty = " << set5.empty() << " set5.max_size = " << set5.max_size() << endl;cout << "set5的值为:  ";for(auto &val: set5){cout << val << "\t";}cout << endl;//6.移动构造函数multiset<string> set6(std::move(set1));cout << "set6.size = " << set6.size() << " set6.empty = " << set6.empty() << " set6.max_size = " << set6.max_size() << endl;auto iter6 = set6.begin();cout << "set6的值为:  ";while (iter6 != set6.end()){cout << *iter6 << "\t";iter6++;}cout << endl;cout << "-----------------------" << endl;// class as Comparestd::multiset<int> set7 = {1, 7, 3, 4, 3};auto iter7 = set7.begin();//默认是升序输出的cout << "默认是升序输出的  set7的值为:  ";while (iter7 != set7.end()){cout << *iter7 << "\t";iter7++;}cout << endl;std::multiset<int, classcomp_less> set8 = {1, 7, 3, 4, 3};auto iter8 = set8.begin();cout << "升序输出        set8的值为:  ";//升序输出while (iter8 != set8.end()){cout << *iter8 << "\t";iter8++;}cout << endl;std::multiset<int, classcomp_greater> set9 = {1, 7, 3, 4, 3};auto iter9 = set9.begin();cout << "降序输出        set9的值为:  ";//降序输出while (iter9 != set9.end()){cout << *iter9 << "\t";iter9++;}cout << endl;//也可以调用系统自带的比较函数,例如greater,less, 要包含头文件functionalstd::multiset<int, greater<int>> set10 = {1, 7, 3, 4, 3};auto iter10 = set10.begin();cout << "降序输出 set10的值为:  ";//降序输出while (iter10 != set10.end()){cout << *iter10 << "\t";iter10++;}cout << endl;std::multiset<int, less<int>> set11 = {1, 7, 3, 4, 3};auto iter11 = set11.begin();cout << "升序输出 set11的值为:  ";//降序输出while (iter11 != set11.end()){cout << *iter11 << "\t";iter11++;}cout << endl;bool(*fn_pt)(int,int) = fncomp_less;std::multiset<int, bool(*)(int,int)> set12 (fn_pt);  // function pointer as Compareset12.insert(1);set12.insert(7);set12.insert(4);set12.insert(3);auto iter12 = set12.begin();cout << "升序输出 set12的值为:  ";//降序输出while (iter12 != set12.end()){cout << *iter12 << "\t";iter12++;}cout << endl;bool(*fn_pt_greater)(int,int) = fncomp_greater;std::multiset<int, bool(*)(int,int)> set13 (fn_pt_greater);set13.insert(1);set13.insert(7);set13.insert(4);set13.insert(3);auto iter13 = set13.begin();cout << "升序输出 set13的值为:  ";//升序输出while (iter13 != set13.end()){cout << *iter13 << "\t";iter13++;}cout << endl;//自定义类型比较std::multiset<Point, PointCmp_greater> set14 = {{1, 2}, {7, 8}, {3, 4}, {3, 5}};set14.insert({8, 7}); // 这会失败,因为 8,7 的斜边长度等于 7,8cout << "降序输出 set14的值为:    ";for(auto& p: set14)cout << '(' << p.x << ',' << p.y << ") ";cout << endl;std::multiset<Point, PointCmp_less> set15 = {{1, 2}, {7, 8}, {3, 4}, {3, 5}};set15.insert({8, 7});cout << "升序输出 set15的值为:    ";for(auto& p: set15)cout << '(' << p.x << ',' << p.y << ") ";cout << endl;
}int main()
{multisetInit();cout << "Hello, world!" << endl;return 0;
}

运行结果:

参考:

https://zh.cppreference.com/w/cpp/container/multiset

multiset学习之创建,初始化,赋值操作operator=, empty,size相关推荐

  1. multimap学习之创建,初始化,赋值操作operator=, empty,size,max_size

    multimap 是关联容器,含有键值对的已排序列表,其功能与map一样,唯一不同的是,它容许多个元素拥有同一键.本篇学习map的创建,初始化,赋值操作operator=, empty,size,ma ...

  2. set学习之创建,初始化,赋值操作operator=, empty,size

    set 是关联容器,含有 Key 类型对象的已排序集.用比较函数 比较 (Compare) 进行排序.搜索.移除和插入拥有对数复杂度. set 通常以红黑树实现.本篇学习set的创建及初始化. 示例代 ...

  3. C语言--关于指针两种初始化赋值操作

    首先,什么叫做指针的初始化?  int * p = NULL:在定义指针变量p的同时把p的值设置为0x00000000;而不是把*p的值设置为0x00000000.这个过程叫做初始化. 探讨: int ...

  4. forword_list学习之创建,初始化assign,赋值操作operator=, 元素访问front,交换内容swap,检查容器是否为空empty

    forword_list是C++11新增的一个顺序容器,它是支持从容器的任何位置快速插入和移动元素的容器.不支持快速随机访问.它实现为单链表,且实质上与其在C中实现相比无任何开销.与std::list ...

  5. pandas学习笔记三之赋值操作

  6. matlab学习笔记11_3高维数组操作 filp, shiftdim, size, permute, ipermute

    一起来学matlab-matlab学习笔记11 11_3 高维数组处理和运算 filp, shiftdim, size, permute, ipermute 觉得有用的话,欢迎一起讨论相互学习~ fi ...

  7. 【C++】类的成员初始化表与构造函数内赋值操作

    我们常常在初始化类数据成员的时候,对使用初始化表和在构造函数中十分困惑,这二者有什么区别呢?我们应该如何选择呢? 先举个简单的例子,看下面的两段代码: 代码A: inline Account::Acc ...

  8. multiset学习之修改操作clear,erase,swap,extract,merge

    本篇学习multiset的修改操作,具体的函数有: clear 清除内容 (公开成员函数) erase 擦除元素 (公开成员函数) swap 交换内容 (公开成员函数) extract (C++17) ...

  9. 关于学习Python的一点学习总结(26->自定义函数及创建初始化数据结构函数)

    62.自定义函数: 1.判断某个对象是否可调用,使用内置函数callable >>> import math>>> x=1>>> y=math.s ...

最新文章

  1. 安装了email模块还是报错_Git windows安装及使用教程
  2. php 数组接在数组后面,PHP array_splice()接合数组用法的简单介绍
  3. 大话设计模式-策略模式与简单工厂模式
  4. 亿级规模的 Feed 流系统,如何轻松设计?
  5. latex中空一整行,新的一行顶格写
  6. Win32中GDI+应用(一)
  7. 利用mysql的预编译机制_Mysqli的预编译机制处理批量数据过程
  8. Linux DRM 理解
  9. python mro文件_Python面向对象之MRO
  10. BOC保护的氨基酸卟啉TAPP-Ala-BOC、TAPP-Phe-BOC、TAPP-Trp-BOC、Zn·TAPP-Ala-BOC、Zn·TAPP-Phe-BOC、Zn·TAPP-Trp-BOC齐岳
  11. 卸载包时不要简单的用 uninstall !!
  12. SHINY-SERVER R(sparkR)语言web解决方案 架设shiny服务器
  13. 大数据医疗面临着哪些挑战?
  14. JavaScript-学习笔记一
  15. Ubuntu 设置时间同步
  16. C++实现简单的工资管理系统
  17. Pretty girl你一定要会管理自己的身体
  18. oracle配置并发备份,oracle数据库还原以及备份 包括快速备份(并发压缩)
  19. 小学四年级计算机上册考试试题,小学四年级信息技术期末考试试题及答案
  20. 区块链相关专业术语集合

热门文章

  1. 杭电多校 HDU 6641 TDL
  2. 计算机类大学生就业指导新闻稿,大学生就业创业新闻稿
  3. 比赛赛程安排算法--分治算法
  4. linux mate 安装,MATE 1.2 桌面发布-安装方法
  5. JavaScript截取数组常用方法
  6. 第1节:深度学习与机器学习的区别
  7. Spring Boot Starters
  8. 注册表-删不掉的桌面快捷
  9. Android 数据库(SQLite)的导入导出命令
  10. 验证6种信用卡卡号的代码