C++面向对象编程分享07----20160407_李楚煌

来源:互联网 发布:目标软件怎么样了 编辑:程序博客网 时间:2024/06/07 10:04

#include <iostream>#include <algorithm>#include <functional>#include <string>#include <iterator>#include <set>using namespace std;class Programmer{public:Programmer(const int id, const wstring name)     //初始化 :Id(id), Name(name){}void Print()const{wcout << L"[" << Id << L"] : " << Name << endl;}Programmer SetName(wstring Name){this->Name = Name;return *this;}wstring GetName(){return Name;}int Id;wstring Name;};struct ProgrammerIdGreater {bool operator()(Programmer p1,Programmer p2){return(p1.Id < p2.Id) ? true : false;}};struct ProgrammerNameGreater {bool operator()(const Programmer&p1, const Programmer&p2)const{return (p1.Name < p2.Name) ? true : false;}};void initial(Programmer const& obj){obj.Print();} int main(){wcout<<Programmer(1, L"get a name").GetName();const int size = 6;const Programmer personArray[size] = {Programmer(1, L"Scott Meyers"),Programmer(2, L"Martin Fowler"),Programmer(3, L"Bill Gates"),Programmer(4, L"P.J. Plaught"),Programmer(5, L"Stanley B. Lippman"),Programmer(6, L"Andrei Alexandrescu"),};set<Programmer, ProgrammerIdGreater>ps1(personArray, personArray + size);set<Programmer, ProgrammerNameGreater>ps2(personArray, personArray + size);cout << "(order by Id)以下是各个人物的ID,名字:" << endl;for_each(ps1.begin(), ps1.end(),initial);cout << endl;cout << "查找Bill Gates:" << endl;set<Programmer>::iterator it= ps1.find(Programmer(3, L""));if(it != ps1.end()){wcout << (*it).Name << "  " << (*it).Id << endl;}cout << endl;set<Programmer>::iterator it2= ps2.find(Programmer(3, L"Bill Gates"));if (it2 != ps2.end()){const_cast<Programmer&>(*it2).SetName(L"David Vandevoorde");}cout << "(order by Name)以下是各个人物的ID,名字:" << endl;for_each(ps2.begin(), ps2.end(),initial);cout << endl;system("pause");return 0;}

整段代码最值得分析的地方在:



set的定义是:



它的两个参数是分别是 可复制、可拷贝的类型   和    排序准则。

set是关联式容器,通过红黑树实现,

上述画红线的句子酷的地方在于将set和数组组合在一起了,

更准确点讲,以数组的方式将元素放入set容器。

set<int>  s2(s1.begin(),s1.end());
这行代码有助于理解, 即set容器声明了,怎样initial呢?  :
(s1.begin(),s1.end())

以上。


1 0
原创粉丝点击