c++ set容器操作自定义对象、int、char方法

/**
set不支持随机访问,必须要使用迭代器去访问。
由于set放入一个元素就会调整这个元素的位置,把它放到合适的位置,所以set中只有一个insert插入操作
实现了红黑树的平衡二叉检索树的数据结构,故利于检索而不利于维护
结构体设置友元函数重载<,实现结构体的比较(c++结构体本身没有比较大小功能,但是可以设置运算符重载)

集合的算法algrithm(代码演示了union,这几个函数适合操作字符串):
std::set_intersection() :这个函数是求两个集合的交集。
std::set_union() :求两个集合的并集
std::set_difference():差集
std::set_symmetric_difference():得到的结果是 第一个迭代器相对于第二个的差集 并上第二个相对于第一个的差集
---------------------
*/
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
struct Student
{
    int cord;
    string name;
public:
    Student() {}
    Student(int c, string n):cord(c), name(n) {}
    bool friend operator < (Student a, Student b) {
        return a.cord > b.cord;
    }
};

int main()
{
    /*
    set 自定义对象操作
    */
    set<Student> s;//初始化
    s.insert(Student(1,"a"));//插入
    s.insert(Student(2,"b"));
    set<Student> s2;
    s2.insert(Student(1,"aa"));
    s2.insert(Student(22,"bb"));
    //合并:22 bb   2 b     1 aa
    set_union(s.begin(),s.end(),s2.begin(),s2.end(),inserter(s2,s2.end()));
    //遍历
    set<Student>::iterator it;
    for( it = s2.begin(); it != s2.end();it++)
        cout<<it->cord<<" "<<it->name<< "\t";//输出
    //查找
    if(s.find(Student(2,"bb")) != s.end()) {
        cout<<"\ns find stu(2) success\n";
    } else {
        cout<<"\ns find stu(2) failed\n";
    }
    //清除后查找
    s.clear();
    if(s.find(Student(2,"bb")) != s.end()) {
        cout<<"\ns find stu(2) success\n";
    } else {
        cout<<"\ns find stu(2) failed\n";
    }

    /*
    set int类型操作
    */
    set<int> intS;
    intS.insert(1);
    intS.insert(3);
    intS.insert(2);
    //遍历
    set<int>::iterator intIter;
    for(intIter = intS.begin();intIter != intS.end();intIter++)
        cout<<*intIter<<" ";//输出
    //查找
    if(intS.find(2) != intS.end()) {
        cout<<"\ns find int(2) success\n";
    } else {
        cout<<"\ns find int(2) failed\n";
    }

    /*
    set char类型操作
    */
    set<char> charS;
    charS.insert('a');
    charS.insert('b');
    //遍历
    set<char>::iterator charIter;
    for(charIter = charS.begin();charIter != charS.end();charIter++)
        cout<<*charIter<<" ";//输出
        //查找
    if(intS.find('a') != intS.end()) {
        cout<<"\ns find char(\'a\') success\n";
    } else {
        cout<<"\ns find char(\'a\') failed\n";
    }

    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值