<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Markmap</title>
<style>
* {
  margin: 0;
  padding: 0;
}
#mindmap {
  display: block;
  width: 100vw;
  height: 100vh;
}
</style>
<link rel="stylesheet" href="https://gcore.jsdelivr.net/npm/@highlightjs/cdn-assets@11.8.0/styles/default.min.css"><link rel="stylesheet" href="https://gcore.jsdelivr.net/npm/markmap-toolbar@0.15.6/dist/style.css">
</head>
<body>
<svg id="mindmap"></svg>
<script src="https://gcore.jsdelivr.net/npm/d3@7.8.5/dist/d3.min.js"></script><script src="https://gcore.jsdelivr.net/npm/markmap-view@0.15.6/dist/browser/index.js"></script><script src="https://gcore.jsdelivr.net/npm/markmap-toolbar@0.15.6/dist/index.js"></script><script>(r => {
                setTimeout(r);
              })(() => {
  const {
    markmap,
    mm
  } = window;
  const {
    el
  } = markmap.Toolbar.create(mm);
  el.setAttribute('style', 'position:absolute;bottom:20px;right:20px');
  document.body.append(el);
})</script><script>((getMarkmap, getOptions, root2, jsonOptions) => {
                const markmap = getMarkmap();
                window.mm = markmap.Markmap.create(
                  "svg#mindmap",
                  (getOptions || markmap.deriveOptions)(jsonOptions),
                  root2
                );
              })(() => window.markmap,null,{"type":"heading","depth":0,"payload":{"lines":[1,2]},"content":"关联容器","children":[{"type":"heading","depth":1,"payload":{"lines":[3,4]},"content":"关联容器简介","children":[{"type":"heading","depth":2,"payload":{"lines":[4,5]},"content":"关联容器的概念","children":[{"type":"blockquote","depth":3,"payload":{"lines":[5,6]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[5,6]},"content":"关联容器是用于存放多个单一数据类型的类模板。","children":[]}]},{"type":"blockquote","depth":3,"payload":{"lines":[7,8]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[7,8]},"content":" 关联容器内部存储的形式大多采用哈希表或者二叉树等非线性的数据结构。","children":[]}]},{"type":"blockquote","depth":3,"payload":{"lines":[9,10]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[9,10]},"content":" 关联容器增删元素时效率较低,但是查找元素的速度比线性表快。","children":[]}]}]},{"type":"heading","depth":2,"payload":{"lines":[11,12]},"content":"关联容器的种类与选择","children":[{"type":"blockquote","depth":3,"payload":{"lines":[12,13]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[12,13]},"content":"<code>set</code> :集合,不允许有重复元素,容器存储元素作为键,键不能重复,能够快速读取。","children":[]}]},{"type":"blockquote","depth":3,"payload":{"lines":[14,15]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[14,15]},"content":"<code>map</code> :映射,容器存储的形式为键值对,一个键对应一个值,键不能重复,值能重复。","children":[]}]},{"type":"blockquote","depth":3,"payload":{"lines":[16,17]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[16,17]},"content":"<code>multiset</code> :集合,允许有重复键。","children":[]}]},{"type":"blockquote","depth":3,"payload":{"lines":[18,19]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[18,19]},"content":"<code>multimap</code> :映射,允许有重复键。","children":[]}]}]}]},{"type":"heading","depth":1,"payload":{"lines":[20,21]},"content":"map简介","children":[{"type":"heading","depth":2,"payload":{"lines":[21,22]},"content":"pair的概念","children":[{"type":"blockquote","depth":3,"payload":{"lines":[22,23]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[22,23]},"content":"pair 是一个类模板,它定义在<code>&lt;utility&gt;</code>头文件中,它能够用来存放两个数据类型的数据。","children":[]}]},{"type":"blockquote","depth":3,"payload":{"lines":[24,25]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[24,25]},"content":"pair是有两个泛型的模板类,原型声明如下","children":[]}]},{"type":"fence","depth":3,"content":"<pre><code class=\"language-cpp\"><span class=\"hljs-keyword\">template</span>&lt;<span class=\"hljs-keyword\">typename</span> T1, <span class=\"hljs-keyword\">typename</span> T2&gt; <span class=\"hljs-keyword\">class</span> <span class=\"hljs-title class_\">pair</span>;\n</code></pre>\n","children":[],"payload":{"lines":[25,28]}},{"type":"blockquote","depth":3,"payload":{"lines":[28,29]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[28,29]},"content":" 它有两个成员变量<code>first</code>(T1类型)和<code>second</code>(T2类型),分别表示键和其对应的值。","children":[]}]}]},{"type":"heading","depth":2,"payload":{"lines":[29,30]},"content":"map的概念","children":[{"type":"blockquote","depth":3,"payload":{"lines":[31,32]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[31,32]},"content":"map是关联容器的一种,该容器中存放元素的类型是pair。其中pair的键不能重复。","children":[]}]},{"type":"blockquote","depth":3,"payload":{"lines":[33,34]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[33,34]},"content":" 由于map的底层实现是将键按照大小存入二叉树中,以便于查询。所以存入map中的键的类型必须能够比较大小(重载<code>&lt;</code>运算符或者提供比较函数指针)。","children":[]}]}]},{"type":"heading","depth":2,"payload":{"lines":[34,35]},"content":"map的应用","children":[{"type":"blockquote","depth":3,"payload":{"lines":[35,40]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[35,40]},"content":"使用map时需要包含头文件<code>&lt;map&gt;</code>以及使用命名空间std。<br>\n 可以通过线上C++帮助文档获取map的各个成员函数的介绍及使用方法。<br>\n <code>map::insert</code> 将pair元素插入map。<br>\n <code>map::operator[]</code> 通过键获取对应的值,如没有键值则创建。<br>\n <code>map::erase</code> 通过迭代器将元素从map中删除。","children":[]}]},{"type":"heading","depth":3,"payload":{"lines":[40,41]},"content":"示例代码","children":[{"type":"ordered_list","depth":4,"payload":{"lines":[41,42],"startIndex":1},"content":"","children":[{"type":"list_item","depth":5,"payload":{"lines":[41,42],"index":1},"content":"1. 声明创建自定义<code>Student</code>类,新建文件<code>Student.h</code>,内容如下","children":[]}]},{"type":"fence","depth":4,"content":"<pre><code class=\"language-h\">#ifndef _STUDENT_H\n#define _STUDENT_H\n\n#include &lt;string&gt;\nusing namespace std;\nclass Student\n{\nprivate:\n    int _id;\n    string _name;\n\npublic:\n    Student(const string &amp;name, int id);\n    int getId() const;\n    string getName() const;\n    void introduce() const;\n};\n\n#endif\n</code></pre>\n","children":[],"payload":{"lines":[42,63]}},{"type":"ordered_list","depth":4,"payload":{"lines":[63,64],"startIndex":2},"content":"","children":[{"type":"list_item","depth":5,"payload":{"lines":[63,64],"index":2},"content":"2. 实现自定义<code>Student</code>类方法,创建文件<code>Student.cpp</code>","children":[]}]},{"type":"fence","depth":4,"content":"<pre><code class=\"language-cpp\"><span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include</span> <span class=\"hljs-string\">&quot;Student.h&quot;</span></span>\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include</span> <span class=\"hljs-string\">&lt;iostream&gt;</span></span>\n<span class=\"hljs-keyword\">using</span> <span class=\"hljs-keyword\">namespace</span> std;\n\nStudent::<span class=\"hljs-built_in\">Student</span>(<span class=\"hljs-type\">const</span> string &amp;name, <span class=\"hljs-type\">int</span> id)\n        : _name(name), _id(id)\n{\n}\n<span class=\"hljs-function\"><span class=\"hljs-type\">int</span> <span class=\"hljs-title\">Student::getId</span><span class=\"hljs-params\">()</span> <span class=\"hljs-type\">const</span>\n</span>{\n    <span class=\"hljs-keyword\">return</span> _id;\n}\n<span class=\"hljs-function\">string <span class=\"hljs-title\">Student::getName</span><span class=\"hljs-params\">()</span> <span class=\"hljs-type\">const</span>\n</span>{\n    <span class=\"hljs-keyword\">return</span> _name;\n}\n<span class=\"hljs-function\"><span class=\"hljs-type\">void</span> <span class=\"hljs-title\">Student::introduce</span><span class=\"hljs-params\">()</span> <span class=\"hljs-type\">const</span>\n</span>{\n    cout &lt;&lt; <span class=\"hljs-string\">&quot;Hello!I&#x27;m &quot;</span> &lt;&lt; _name &lt;&lt; <span class=\"hljs-string\">&quot;, my id card is &quot;</span> &lt;&lt; _id;\n}\n</code></pre>\n","children":[],"payload":{"lines":[64,86]}},{"type":"ordered_list","depth":4,"payload":{"lines":[86,87],"startIndex":3},"content":"","children":[{"type":"list_item","depth":5,"payload":{"lines":[86,87],"index":3},"content":"3. 创建<code>main.cpp</code>,内容如下","children":[]}]},{"type":"blockquote","depth":4,"payload":{"lines":[87,92]},"content":"","children":[{"type":"list_item","depth":5,"payload":{"lines":[87,88],"index":1},"content":"1. <code>string mystr(const int len)</code> 方法是生成长度为len的随机字符串<code>a-z</code>。","children":[]},{"type":"list_item","depth":5,"payload":{"lines":[88,89],"index":2},"content":"2. <code>struct myCompare</code> 结构体用于比较<code>Student</code>类对象的键值大小,优先比较字符串长度,相同之后再比较学生类的<code>_id</code>属性。","children":[]},{"type":"list_item","depth":5,"payload":{"lines":[89,90],"index":3},"content":"3. <code>map&lt;Student, int, decltype(myCompareObj)&gt; students;</code> 定义map对象,<code>decltype(myCompareObj)</code> 表示使用<code>myCompare</code>结构体进行比较,<code>decltype</code>是c++11的用法,编译时要使用<code>-std=c++11</code>。","children":[]},{"type":"list_item","depth":5,"payload":{"lines":[90,91],"index":4},"content":"4. map对象的插入操作,先创建<code>Student</code>对象,再将<code>pair&lt;Student, int&gt;</code>插入到map中。","children":[]},{"type":"list_item","depth":5,"payload":{"lines":[91,92],"index":5},"content":"5. map的删除操作,通过<code>find</code>方法找到对应的键值,再通过<code>erase</code>方法删除。","children":[]}]},{"type":"fence","depth":4,"content":"<pre><code class=\"language-cpp\"><span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include</span> <span class=\"hljs-string\">&lt;iostream&gt;</span></span>\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include</span> <span class=\"hljs-string\">&quot;Student.h&quot;</span></span>\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include</span> <span class=\"hljs-string\">&lt;map&gt;</span></span>\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include</span> <span class=\"hljs-string\">&lt;algorithm&gt;</span></span>\n\n<span class=\"hljs-function\">string <span class=\"hljs-title\">mystr</span><span class=\"hljs-params\">(<span class=\"hljs-type\">const</span> <span class=\"hljs-type\">int</span> len)</span>\n</span>{\n  string str;\n  <span class=\"hljs-type\">char</span> c;\n  <span class=\"hljs-keyword\">for</span> (<span class=\"hljs-type\">int</span> i = <span class=\"hljs-number\">0</span>; i &lt; len; ++i)\n  {\n    c = <span class=\"hljs-built_in\">rand</span>() % <span class=\"hljs-number\">26</span> + <span class=\"hljs-string\">&#x27;a&#x27;</span>;\n    str.<span class=\"hljs-built_in\">push_back</span>(c);\n  }\n  <span class=\"hljs-keyword\">return</span> str;\n}\n\n<span class=\"hljs-keyword\">struct</span> <span class=\"hljs-title class_\">myCompare</span>\n{\n  <span class=\"hljs-function\"><span class=\"hljs-type\">bool</span> <span class=\"hljs-title\">operator</span><span class=\"hljs-params\">()</span><span class=\"hljs-params\">(<span class=\"hljs-type\">const</span> Student &amp;s1, <span class=\"hljs-type\">const</span> Student &amp;s2)</span>\n  </span>{\n    <span class=\"hljs-type\">const</span> <span class=\"hljs-type\">int</span> len1 = s1.<span class=\"hljs-built_in\">getName</span>().<span class=\"hljs-built_in\">length</span>();\n    <span class=\"hljs-type\">const</span> <span class=\"hljs-type\">int</span> len2 = s2.<span class=\"hljs-built_in\">getName</span>().<span class=\"hljs-built_in\">length</span>();\n    <span class=\"hljs-keyword\">if</span> (len1 != len2)\n    {\n      <span class=\"hljs-keyword\">return</span> len1 &gt; len2;\n    }\n    <span class=\"hljs-keyword\">else</span>\n    {\n      <span class=\"hljs-keyword\">return</span> s1.<span class=\"hljs-built_in\">getId</span>() &lt; s2.<span class=\"hljs-built_in\">getId</span>();\n    }\n  }\n} myCompareObj;\n\n<span class=\"hljs-function\"><span class=\"hljs-type\">int</span> <span class=\"hljs-title\">main</span><span class=\"hljs-params\">(<span class=\"hljs-type\">int</span> argc, <span class=\"hljs-type\">char</span> **argv)</span>\n</span>{\n  map&lt;Student, <span class=\"hljs-type\">int</span>, <span class=\"hljs-keyword\">decltype</span>(myCompareObj)&gt; students; <span class=\"hljs-comment\">// 学生-成绩</span>\n  <span class=\"hljs-type\">int</span> len = <span class=\"hljs-number\">0</span>;\n  <span class=\"hljs-keyword\">for</span> (<span class=\"hljs-type\">int</span> i = <span class=\"hljs-number\">0</span>; i &lt; <span class=\"hljs-number\">10</span>; ++i)\n  {\n    len = <span class=\"hljs-built_in\">rand</span>() % <span class=\"hljs-number\">6</span> + <span class=\"hljs-number\">4</span>;\n    <span class=\"hljs-function\">Student <span class=\"hljs-title\">stu</span><span class=\"hljs-params\">(mystr(len), i)</span></span>;\n    <span class=\"hljs-function\">pair&lt;Student, <span class=\"hljs-type\">int</span>&gt; <span class=\"hljs-title\">p</span><span class=\"hljs-params\">(stu, rand() % <span class=\"hljs-number\">50</span> + <span class=\"hljs-number\">50</span>)</span></span>;\n    students.<span class=\"hljs-built_in\">insert</span>(p);\n  }\n\n  Student stx = *(<span class=\"hljs-keyword\">new</span> <span class=\"hljs-built_in\">Student</span>(<span class=\"hljs-string\">&quot;Tom Mick&quot;</span>, <span class=\"hljs-number\">12</span>));\n  <span class=\"hljs-function\">pair&lt;Student, <span class=\"hljs-type\">int</span>&gt; <span class=\"hljs-title\">pstx</span><span class=\"hljs-params\">(stx, rand() % <span class=\"hljs-number\">50</span> + <span class=\"hljs-number\">50</span>)</span></span>;\n\n  students.<span class=\"hljs-built_in\">insert</span>(pstx);\n  cout &lt;&lt; <span class=\"hljs-string\">&quot;insert one Student&quot;</span> &lt;&lt; endl;\n  cout &lt;&lt; <span class=\"hljs-string\">&quot;==============================&quot;</span> &lt;&lt; endl;\n  map&lt;Student, <span class=\"hljs-type\">int</span>, <span class=\"hljs-keyword\">decltype</span>(myCompareObj)&gt;::iterator it;\n  <span class=\"hljs-keyword\">for</span> (it = students.<span class=\"hljs-built_in\">begin</span>(); it != students.<span class=\"hljs-built_in\">end</span>(); ++it)\n  {\n    it-&gt;first.<span class=\"hljs-built_in\">introduce</span>();\n    cout &lt;&lt; <span class=\"hljs-string\">&quot; and my point is &quot;</span> &lt;&lt; it-&gt;second &lt;&lt; <span class=\"hljs-string\">&quot;.&quot;</span> &lt;&lt; endl;\n  }\n\n  it = students.<span class=\"hljs-built_in\">find</span>(stx);\n  students.<span class=\"hljs-built_in\">erase</span>(it);\n  cout &lt;&lt; <span class=\"hljs-string\">&quot;erase one Student&quot;</span> &lt;&lt; endl;\n  cout &lt;&lt; <span class=\"hljs-string\">&quot;==============================&quot;</span> &lt;&lt; endl;\n  <span class=\"hljs-keyword\">for</span> (it = students.<span class=\"hljs-built_in\">begin</span>(); it != students.<span class=\"hljs-built_in\">end</span>(); ++it)\n  {\n    it-&gt;first.<span class=\"hljs-built_in\">introduce</span>();\n    cout &lt;&lt; <span class=\"hljs-string\">&quot; and my point is &quot;</span> &lt;&lt; it-&gt;second &lt;&lt; <span class=\"hljs-string\">&quot;.&quot;</span> &lt;&lt; endl;\n  }\n  <span class=\"hljs-keyword\">return</span> <span class=\"hljs-number\">0</span>;\n}\n</code></pre>\n","children":[],"payload":{"lines":[92,164]}},{"type":"ordered_list","depth":4,"payload":{"lines":[165,166],"startIndex":4},"content":"","children":[{"type":"list_item","depth":5,"payload":{"lines":[165,166],"index":4},"content":"4. 在Linux下,可以使用命令<code>g++ -g Student.cpp main.cpp -std=c++11 -o main</code>编译运行,效果如下","children":[]}]},{"type":"fence","depth":4,"content":"<pre><code class=\"language-terminal\">insert one Student\n==============================\nHello!I&#x27;m iddqscdxr, my id card is 3 and my point is 79.\nHello!I&#x27;m jybldbef, my id card is 5 and my point is 98.\nHello!I&#x27;m Tom Mick, my id card is 12 and my point is 93.\nHello!I&#x27;m yggxxpk, my id card is 7 and my point is 77.\nHello!I&#x27;m rcbyne, my id card is 6 and my point is 56.\nHello!I&#x27;m rellnm, my id card is 8 and my point is 95.\nHello!I&#x27;m wlrbb, my id card is 0 and my point is 86.\nHello!I&#x27;m zowkk, my id card is 2 and my point is 86.\nHello!I&#x27;m bhcd, my id card is 1 and my point is 90.\nHello!I&#x27;m owfr, my id card is 4 and my point is 93.\nHello!I&#x27;m pqfw, my id card is 9 and my point is 64.\nerase one Student\n==============================\nHello!I&#x27;m iddqscdxr, my id card is 3 and my point is 79.\nHello!I&#x27;m jybldbef, my id card is 5 and my point is 98.\nHello!I&#x27;m yggxxpk, my id card is 7 and my point is 77.\nHello!I&#x27;m rcbyne, my id card is 6 and my point is 56.\nHello!I&#x27;m rellnm, my id card is 8 and my point is 95.\nHello!I&#x27;m wlrbb, my id card is 0 and my point is 86.\nHello!I&#x27;m zowkk, my id card is 2 and my point is 86.\nHello!I&#x27;m bhcd, my id card is 1 and my point is 90.\nHello!I&#x27;m owfr, my id card is 4 and my point is 93.\nHello!I&#x27;m pqfw, my id card is 9 and my point is 64.\n</code></pre>\n","children":[],"payload":{"lines":[166,193]}}]}]}]},{"type":"heading","depth":1,"payload":{"lines":[193,194]},"content":"set简介","children":[{"type":"heading","depth":2,"payload":{"lines":[195,196]},"content":"set的概念","children":[{"type":"blockquote","depth":3,"payload":{"lines":[196,197]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[196,197]},"content":"set是关联容器的一种,主要用于快速地对元素进行查找。","children":[]}]},{"type":"blockquote","depth":3,"payload":{"lines":[198,199]},"content":"","children":[{"type":"paragraph","depth":4,"payload":{"lines":[198,199]},"content":" 由于set的底层实现是将键按照大小存入二叉树中,以便于查询。所以存入map中的键的类型必须能够比较大小(重载<code>&lt;</code>运算符或者提供比较函数指针)。与map特性一致,set可以理解成特殊的map,即键值相同的map。","children":[]}]}]}]},{"type":"heading","depth":1,"payload":{"lines":[199,200]},"content":"set的应用","children":[{"type":"blockquote","depth":2,"payload":{"lines":[200,205]},"content":"","children":[{"type":"paragraph","depth":3,"payload":{"lines":[200,205]},"content":"使用set时需要包含头文件<set>以及命名空间std;<br>\nC++帮助文档<code>https://legacy.cplusplus.com/</code> 获取set的详细使用方法<br>\n<code>set.insert</code> 元素插入容器<br>\n<code>set.find</code> 查找元素<br>\n<code>set.erase</code> 删除元素","children":[]}]},{"type":"heading","depth":2,"payload":{"lines":[206,207]},"content":"示例代码","children":[{"type":"ordered_list","depth":3,"payload":{"lines":[207,209],"startIndex":1},"content":"","children":[{"type":"list_item","depth":4,"payload":{"lines":[207,208],"index":1},"content":"1. 这里使用的Student类,与上面map的Student类相同,这里不再赘述,这里使用set存储学生信息,并按照学生的基础信息进行排序。","children":[]},{"type":"list_item","depth":4,"payload":{"lines":[208,209],"index":2},"content":"2. 重新编写<code>main.cpp</code>文件,内容如下","children":[]}]},{"type":"fence","depth":3,"content":"<pre><code class=\"language-cpp\"><span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include</span> <span class=\"hljs-string\">&lt;iostream&gt;</span></span>\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include</span> <span class=\"hljs-string\">&quot;Student.h&quot;</span></span>\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include</span> <span class=\"hljs-string\">&lt;set&gt;</span></span>\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include</span> <span class=\"hljs-string\">&lt;algorithm&gt;</span></span>\n\n<span class=\"hljs-function\">string <span class=\"hljs-title\">mystr</span><span class=\"hljs-params\">(<span class=\"hljs-type\">const</span> <span class=\"hljs-type\">int</span> len)</span>\n</span>{\n  string str;\n  <span class=\"hljs-type\">char</span> c;\n  <span class=\"hljs-keyword\">for</span> (<span class=\"hljs-type\">int</span> i = <span class=\"hljs-number\">0</span>; i &lt; len; ++i)\n  {\n    c = <span class=\"hljs-built_in\">rand</span>() % <span class=\"hljs-number\">26</span> + <span class=\"hljs-string\">&#x27;a&#x27;</span>;\n    str.<span class=\"hljs-built_in\">push_back</span>(c);\n  }\n  <span class=\"hljs-keyword\">return</span> str;\n}\n\n<span class=\"hljs-keyword\">struct</span> <span class=\"hljs-title class_\">myCompare</span>\n{\n  <span class=\"hljs-function\"><span class=\"hljs-type\">bool</span> <span class=\"hljs-title\">operator</span><span class=\"hljs-params\">()</span><span class=\"hljs-params\">(<span class=\"hljs-type\">const</span> Student &amp;s1, <span class=\"hljs-type\">const</span> Student &amp;s2)</span>\n  </span>{\n    <span class=\"hljs-type\">const</span> <span class=\"hljs-type\">int</span> len1 = s1.<span class=\"hljs-built_in\">getName</span>().<span class=\"hljs-built_in\">length</span>();\n    <span class=\"hljs-type\">const</span> <span class=\"hljs-type\">int</span> len2 = s2.<span class=\"hljs-built_in\">getName</span>().<span class=\"hljs-built_in\">length</span>();\n    <span class=\"hljs-keyword\">if</span> (len1 != len2)\n    {\n      <span class=\"hljs-keyword\">return</span> len1 &gt; len2;\n    }\n    <span class=\"hljs-keyword\">else</span>\n    {\n      <span class=\"hljs-keyword\">return</span> s1.<span class=\"hljs-built_in\">getId</span>() &lt; s2.<span class=\"hljs-built_in\">getId</span>();\n    }\n  }\n} myCompareObj;\n\n<span class=\"hljs-function\"><span class=\"hljs-type\">int</span> <span class=\"hljs-title\">main</span><span class=\"hljs-params\">(<span class=\"hljs-type\">int</span> argc, <span class=\"hljs-type\">char</span> **argv)</span>\n</span>{\n  set&lt;Student, <span class=\"hljs-keyword\">decltype</span>(myCompareObj)&gt; students;\n\n  <span class=\"hljs-keyword\">for</span> (<span class=\"hljs-type\">int</span> idx = <span class=\"hljs-number\">0</span>; idx &lt; <span class=\"hljs-number\">10</span>; ++idx)\n  {\n    <span class=\"hljs-type\">int</span> len = <span class=\"hljs-built_in\">rand</span>() % <span class=\"hljs-number\">5</span> + <span class=\"hljs-number\">5</span>;\n    <span class=\"hljs-function\">Student <span class=\"hljs-title\">stu</span><span class=\"hljs-params\">(mystr(len), idx)</span></span>;\n    students.<span class=\"hljs-built_in\">insert</span>(stu);\n  }\n  <span class=\"hljs-function\">Student <span class=\"hljs-title\">stux</span><span class=\"hljs-params\">(<span class=\"hljs-string\">&quot;Tom Mick&quot;</span>, <span class=\"hljs-number\">12</span>)</span></span>;\n  students.<span class=\"hljs-built_in\">insert</span>(stux);\n  cout &lt;&lt; <span class=\"hljs-string\">&quot;insert one Student&quot;</span> &lt;&lt; endl;\n  cout &lt;&lt; <span class=\"hljs-string\">&quot;==============================&quot;</span> &lt;&lt; endl;\n  <span class=\"hljs-keyword\">for</span> (<span class=\"hljs-keyword\">auto</span> it = students.<span class=\"hljs-built_in\">begin</span>(); it != students.<span class=\"hljs-built_in\">end</span>(); ++it)\n  {\n    it-&gt;<span class=\"hljs-built_in\">introduce</span>();\n    cout &lt;&lt; endl;\n  }\n  <span class=\"hljs-type\">const</span> set&lt;Student&gt;::iterator it1;\n  <span class=\"hljs-keyword\">auto</span> uu = students.<span class=\"hljs-built_in\">find</span>(stux);\n  students.<span class=\"hljs-built_in\">erase</span>(uu);\n  cout &lt;&lt; <span class=\"hljs-string\">&quot;erase one Student&quot;</span> &lt;&lt; endl;\n  cout &lt;&lt; <span class=\"hljs-string\">&quot;==============================&quot;</span> &lt;&lt; endl;\n  <span class=\"hljs-keyword\">for</span> (<span class=\"hljs-keyword\">auto</span> it = students.<span class=\"hljs-built_in\">begin</span>(); it != students.<span class=\"hljs-built_in\">end</span>(); ++it)\n  {\n    it-&gt;<span class=\"hljs-built_in\">introduce</span>();\n    cout &lt;&lt; endl;\n  }\n  <span class=\"hljs-keyword\">return</span> <span class=\"hljs-number\">0</span>;\n}\n\n</code></pre>\n","children":[],"payload":{"lines":[209,277]}},{"type":"ordered_list","depth":3,"payload":{"lines":[277,278],"startIndex":2},"content":"","children":[{"type":"list_item","depth":4,"payload":{"lines":[277,278],"index":2},"content":"2. 编译运行,输出结果","children":[]}]},{"type":"fence","depth":3,"content":"<pre><code class=\"language-terminal\">insert one Student\n==============================\nHello!I&#x27;m mowfrxsjy, my id card is 4\nHello!I&#x27;m ldbefsarc, my id card is 5\nHello!I&#x27;m wlrbbmqb, my id card is 0\nHello!I&#x27;m ynecdygg, my id card is 6\nHello!I&#x27;m Tom Mick, my id card is 12\nHello!I&#x27;m dqscdxr, my id card is 3\nHello!I&#x27;m cdarzo, my id card is 1\nHello!I&#x27;m xpklor, my id card is 7\nHello!I&#x27;m llnmpa, my id card is 8\nHello!I&#x27;m kkyhi, my id card is 2\nHello!I&#x27;m qfwkh, my id card is 9\nerase one Student\n==============================\nHello!I&#x27;m mowfrxsjy, my id card is 4\nHello!I&#x27;m ldbefsarc, my id card is 5\nHello!I&#x27;m wlrbbmqb, my id card is 0\nHello!I&#x27;m ynecdygg, my id card is 6\nHello!I&#x27;m dqscdxr, my id card is 3\nHello!I&#x27;m cdarzo, my id card is 1\nHello!I&#x27;m xpklor, my id card is 7\nHello!I&#x27;m llnmpa, my id card is 8\nHello!I&#x27;m kkyhi, my id card is 2\nHello!I&#x27;m qfwkh, my id card is 9\n</code></pre>\n","children":[],"payload":{"lines":[278,305]}},{"type":"ordered_list","depth":3,"payload":{"lines":[305,307],"startIndex":3},"content":"","children":[{"type":"list_item","depth":4,"payload":{"lines":[305,307],"index":3},"content":"3. 分析<br>\n上述就是set的简单使用,根据上述代码,我们可以看到,当两个Student对象的姓名长度相同时,根据它们的id进行排序。","children":[]}]}]}]}]},{})</script>
</body>
</html>