std::set

  •  

    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();//必须使用引用,否则只能修改临时变量
      

        


原文地址:https://www.cnblogs.com/zhaohu/p/9426705.html