•  

    std::set

    • 不重复key
    • 默认less排序
    • 代码
      • #include <iostream>
        #include <set> class Person
        {
        public:
        Person(const std::string& name, const std::size_t nld)
        {
        Name = name;
        Nid = nld;
        } const std::string& GetName() const
        {
        return Name;
        } const void SetId()
        {
        Nid++;
        } const std::size_t GetId() const
        {
        return Nid;
        }
        private:
        std::string Name;
        std::size_t Nid;
        };
        //仿函数
        struct PersonIdComparer: public std::binary_function<Person, Person, bool>
        {
        bool operator()(const Person& p1, const Person& p2) const
        {
        return (p1.GetId() < p2.GetId()) ? true : false;
        }
        }; struct PersonNameComparer: public std::binary_function<Person, Person, bool>
        {
        bool operator()(const Person& p1, const Person& p2) const
        {
        return (p1.GetName() < p2.GetName()) ? true : false;
        }
        };
        int main()
        {
        const std::size_t nSize = 3;
        const Person personArray[nSize] =
        {
        Person("Tom", 1),
        Person("Jason", 2),
        Person("Alice", 3)
        }; std::set<Person,PersonIdComparer> ps1(personArray, personArray + nSize); //插入元素
        ps1.insert(Person("Bill",4)); //删除元素
        std::set<Person, PersonIdComparer>::iterator it = ps1.begin();
        std::advance(it, 1);
        ps1.erase(it); for(it = ps1.begin(); it != ps1.end(); ++it)
        {
        const_cast<Person&>(*it).SetId();
        std::cout<<"Id:"<<(*it).GetId()<<"Name:"<<(*it).GetName()<<std::endl;
        }
        return 0;
        }

          

    • set相关算法
      • set_union
      • set_intersection
      • set_difference
  • set不允许通过直接迭代器改变成员
    • const_cast<Person&>(*it).SetId();//必须使用引用,否则只能修改临时变量
      

        

std::set的更多相关文章

  1. 【NX二次开发】NX内部函数,libuifw.dll文件中的内部函数

    本文分为两部分:"带参数的函数"和 "带修饰的函数". 浏览这篇博客前请先阅读: [NX二次开发]NX内部函数,查找内部函数的方法 带参数的函数: void U ...

  2. C++ std::set

    std::set template < class T, // set::key_type/value_type class Compare = less<T>, // set::k ...

  3. C++ std::priority_queue

    std::priority_queue template <class T, class Container = vector<T>, class Compare = less< ...

  4. C++ std::queue

    std::queue template <class T, class Container = deque<T> > class queue; FIFO queue queue ...

  5. C++ std::multimap

    std::multimap template < class Key, // multimap::key_type class T, // multimap::mapped_type class ...

  6. C++ std::map

    std::map template < class Key, // map::key_type class T, // map::mapped_type class Compare = less ...

  7. C++ std::list

    std::list template < class T, class Alloc = allocator > class list; List Lists are sequence co ...

  8. C++ std::forward_list

    std::forward_list template < class T, class Alloc = allocator > class forward_list; Forward li ...

  9. C++ std::deque

    std::deque template < class T, class Alloc = allocator > class deque; Double ended queue deque ...

  10. C++ std::array

    std::array template < class T, size_t N > class array; Code Example #include <iostream> ...

随机推荐

  1. linux 安装配置zookeeper

    1.什么是zookeeper ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用 ...

  2. cout关闭输出缓冲,调试用

    cout.setf(std::ios::unitbuf);

  3. java九九乘法表

    public class Nine { public static void main(String[] args) { //外层循环控制行数 for (int i = 9;i >=1;i--) ...

  4. jq demo 轮播图,图片可调用,向上,自动+鼠标点击切换

    1 <!doctype html> <html> <head> <meta http-equiv="Content-Type" conte ...

  5. JVM虚拟机 YGC和FGC发生的具体场景

    1.YGC和FGC是什么 YGC :对新生代堆进行gc.频率比较高,因为大部分对象的存活寿命较短,在新生代里被回收.性能耗费较小. FGC :全堆范围的gc.默认堆空间使用到达80%(可调整)的时候会 ...

  6. 剑指Offer 28. 数组中出现次数超过一半的数字 (数组)

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  7. 使用selenium爬取网站动态数据

    处理页面动态加载的爬取 selenium selenium是python的一个第三方库,可以实现让浏览器完成自动化的操作,比如说点击按钮拖动滚轮等 环境搭建: 安装:pip install selen ...

  8. linux下GCC编译文件

    Linux终端使用技巧: Ctrl+Alt+T打开终端 Ctrl+c死循环退出程序 Shift+Ctrl+T:新建标签页 Shift+Ctrl+N:新建窗口 Shift+Ctrl+Q:关闭终端 终端中 ...

  9. linux(ubuntu)共享文件夹

    Linux系统的文件或目录的共享功能是非常强大,而且是非常灵活的,其对权限的控制可以做到非常的细致,当然如果你是通过命令行方式进行设置的 话,那么对于刚接触linux系统的用户来说将是一件十分头痛的事 ...

  10. 【python接口自动化框架-unittest】【一】unittest单元测试框架概念

    一.unittst单元测试框架 概念参考:https://docs.python.org/2/library/unittest.html 使用方法:import unittest (引入unittes ...