#include <iostream>
#include <assert.h>
#include <set>
#include <string>
using namespace std;
struct employee
{
//Member Function
public:
employee() {} //默认构造函数
employee(long eID, string e_Name, float e_Salary);
//Attribute
public:
long ID; //Employee ID
string name; //Employee Name
float salary; //Employee Salary
};
//员工类构造函数
employee::employee(long eID, string e_Name, float e_Salary)
: ID(eID), name(e_Name), salary(e_Salary) {}
//用于对Set容器排序的函数对象
class KeyComp
{
public:
bool operator() (const employee& A, const employee& B)
{
return (A.salary < B.salary);
}};
//定义一个元素类型为employee、按KeyComp排序的Set容器类型
typedef set<employee, KeyComp> EMPLOYEE_SET;
//定义MultiSet容器的随机访问迭代器类型
typedef set<employee, KeyComp>::iterator EMPLOYEE_IT;
//定义MultiSet容器的反向迭代器类型
typedef set<employee, KeyComp>::reverse_iterator EMPLOYEE_RIT;
//函数功能:正向输出Set容器对象的所有元素
//参数:一个Set容器对象
//返回值:无
void output_set(EMPLOYEE_SET e)
{
assert(!e.empty());
EMPLOYEE_IT it;
for (it = e.begin(); it != e.end(); it++)
{
cout << (*it).ID << '\t' << (*it).name << '\t' << (*it).salary << endl;
}
}
//函数功能:逆向输出Set容器对象的所有元素
//参数:一个Set容器对象
//返回值:无
void reverse_output_set(EMPLOYEE_SET e)
{
assert(!e.empty());
EMPLOYEE_RIT rit;
for (rit = e.rbegin(); rit != e.rend(); rit++)
{
cout << (*rit).ID << '\t' << (*rit).name << '\t' << (*rit).salary << endl;
}
}
int main(int argc, char* argv[])
{
EMPLOYEE_SET employees; //声明一个容器对象
//下面的三条语句分别构造三个employee对象,然后插入MultiSet容器对象employees
employees.insert(EMPLOYEE_SET::value_type(100, "huahua", 20000));
employees.insert(EMPLOYEE_SET::value_type(101, "jiafeng", 8000));
employees.insert(EMPLOYEE_SET::value_type(102, "guangli", 10000));
//注意下面的两条语句,因为是Set,不允许有重复的值,所以两个employee对象只会有一条加入到Set容器
employees.insert(EMPLOYEE_SET::value_type(103, "jiahui", 12000));
employees.insert(EMPLOYEE_SET::value_type(103, "jiahui", 12000));
//正向和逆向输出Set容器对象的所有元素
assert(!employees.empty());
cout << "From Head To Tail:" << endl;
output_set(employees);
cout << "From Tail To Head:" << endl;
reverse_output_set(employees);
cout << "Set容器对象employees是否为空? " << (employees.empty() ? "TRUE" : "FALSE") << endl;
cout << "Set容器对象employees共有" << employees.size() << "个employee对象!" << endl;
return 0;
}
分享到:
相关推荐
如果密码不正确,可以使用自增运算符`+=`增加`attempts`的值,如`set /a attempts+=1`,这相当于`attempts = attempts + 1`。如果连续10次输入错误,程序将结束,可以使用条件语句判断`attempts`是否达到10。 自减...
例如,在支持向量机(SVM)中,软间隔分类问题可以转化为一个QP问题,从而使用Active-set算法求解。 ### 6. 学习资源 除了提供的例题,学习Active-set算法还可以参考Matlab官方文档、学术论文和在线教程。理解算法...
// 学习set对象容器的使用 // set容器中的对象不允许重复 // set容器接口的实现类有HashSet和 LinkedHashSet两个 // HashSet不保证迭代顺序, LinkedHashSet按照元素插入的顺序迭代. // 学习List对象容器的使用 // ...
本文详细介绍了在Vue.js框架中使用$set方法给对象动态添加新属性并确保视图更新的实例。在Vue中,如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。这是因为Vue无法检测到动态添加的属性。这时就需要...
Vue.js 是一款流行的前端框架,用于构建用户界面。在 Vue 开发过程中,有时我们需要修改数据并期望视图能够...了解它们的工作原理和正确使用方法,能够避免出现预期外的视图更新问题,提高Vue应用的健壮性和用户体验。
C#之set与get方法的用法案例 在 C# 编程语言中,set 和 get 方法是两个非常重要的概念,它们是属性(Property)的组成部分,在类中用于定义和访问私有成员变量。本文将通过一个实践案例详细讲解 set 和 get 方法的...
《Level Set Methods and Dynamic Implicit Surfaces》这本书不仅详细介绍了Level Set Methods的理论基础和计算方法,还提供了丰富的实例和应用,对于想要深入理解和应用Level Set Methods的读者来说,是一本非常有...
Overset Mesh技术的应用案例包括解决具有小缝隙部件的相对网格运动问题,简化了复杂几何的网格生成,避免了动网格应用中网格重构失败和动网格设置的一些问题。该技术可以克服传统网格方法的一些限制,例如网格重构...
1. 应用范围:`set_dont_touch` 可作用于更广泛的实体,包括 cell、net、reference 和 design;而 `set_size_only` 只能作用于 leaf cell。 2. 保护程度:`set_dont_touch` 保护结构和连接不变,不允许任何形式的...
Set 容器提供了多种构造函数,用于创建 Set 容器实例。 * `set()`:默认构造函数,创建一个空的 Set 容器。 * `set(size_type n)`:创建一个包含 n 个元素的 Set 容器。 * `set(InputIterator first, InputIterator...
通过实例化这个类,并尝试访问和设置各个属性,我们可以看到__get()和__set()方法的工作方式。 具体来说,当我们尝试访问对象的公有属性时,可以直接获取其值。然而,当我们访问不存在的属性(如other)或者尝试...
3. **对象实例化**:使用`Set`语句与`CreateObject`函数结合可以动态创建对象实例。例如,`Set fso = CreateObject("Scripting.FileSystemObject")`创建了一个`FileSystemObject`的新实例。 4. **释放资源**:赋值...
GET请求通常由管理站(如你的C#应用程序)发起,然后由代理(网络设备)响应。这个过程涉及SNMP协议的数据结构,如PDU(协议数据单元)和OID(对象标识符),其中OID是网络设备上每个可管理对象的唯一标识。 SET...
而"lab1-Set-UID.pdf"很可能是对set-UID机制更深入的理论介绍或实验指导,可能包含了更多的安全最佳实践和案例研究。 通过这个实验,参与者不仅能掌握set-UID的工作原理,还能提高对系统安全性的理解和防范意识,这...
- **协议互操作**:通过技术手段让SSL和SET协议能够更好地协同工作,比如在支付过程中使用SSL加密通道传输SET协议数据。 - **增强安全性**:结合SSL的简单高效和SET的强安全性,开发出一种既能快速响应又具备高度...
在本文中,我们将深入探讨`IntSet`的定义、实现和测试,以及如何在实际应用中使用它。 首先,`IntSet`的定义通常基于数组、链表、哈希表或者二叉树等数据结构。由于它主要处理整型数值,我们可以选择最能优化整数...
应用案例 Levelset图像分割在多个领域都有广泛的应用: - **医学影像分析**:如肿瘤检测、血管分割等,可以准确地识别和分割出具有复杂形状和模糊边界的结构。 - **计算机视觉**:在目标检测、跟踪和识别中,...
在本文中,我们将深入分析两个重要的Kubernetes DaemonSet实例:`kube-flannel-ds`和`kube-proxy`。 首先,让我们看看`kube-flannel-ds`。这个DaemonSet主要用于在Kubernetes集群中实现跨节点的网络通信。当我们...
Vue.js 是一个流行的前端JavaScript框架,它简化了构建交互式用户界面的过程。...结合使用`computed`和`watch`,开发者可以构建出更灵活和可控的Vue应用。理解并熟练运用这些方法,能提升代码的健壮性和可维护性。