<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>数据结构 - 标签 - YiXuanYun / 亦轩云</title><link>https://home.y1xuanyun.cn/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/</link><description>数据结构 - 标签 - YiXuanYun / 亦轩云</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Tue, 15 Apr 2025 14:00:00 +0800</lastBuildDate><atom:link href="https://home.y1xuanyun.cn/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" rel="self" type="application/rss+xml"/><item><title>算法整理2025新编（C++）</title><link>https://home.y1xuanyun.cn/25cpp02-%E7%AE%97%E6%B3%95%E6%96%B0%E7%BC%96/</link><pubDate>Tue, 15 Apr 2025 14:00:00 +0800</pubDate><author>亦轩云</author><guid>https://home.y1xuanyun.cn/25cpp02-%E7%AE%97%E6%B3%95%E6%96%B0%E7%BC%96/</guid><description><![CDATA[<div class="hexo-progress-container">
  <div class="hexo-progress-bar" style="width: 100%; background: #4facfe;">
    <span class="hexo-progress-bar-text">该文章长期更新</span>
  </div>
</div>

<h1 id="1-stl">1. STL</h1>
<h2 id="1-vector万能动态数组">1. vector（万能动态数组）</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-cpp">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="n">vector</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span> <span class="n">v</span><span class="p">;</span>          <span class="c1">// 声明
</span></span></span><span class="line"><span class="cl"><span class="n">v</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>         <span class="c1">// 尾部插入
</span></span></span><span class="line"><span class="cl"><span class="n">v</span><span class="p">.</span><span class="n">pop_back</span><span class="p">();</span>           <span class="c1">// 尾部删除
</span></span></span><span class="line"><span class="cl"><span class="n">v</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>               <span class="c1">// 元素个数
</span></span></span><span class="line"><span class="cl"><span class="n">v</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">5</span><span class="p">;</span>               <span class="c1">// 随机访问（不检查越界）
</span></span></span><span class="line"><span class="cl"><span class="n">sort</span><span class="p">(</span><span class="n">v</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">v</span><span class="p">.</span><span class="n">end</span><span class="p">());</span><span class="c1">// 排序
</span></span></span><span class="line"><span class="cl"><span class="n">range</span><span class="o">::</span><span class="n">sort</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>          <span class="c1">// 排序 C++20新特性
</span></span></span></code></pre></div></div>
<h2 id="2-string字符串处理">2. string（字符串处理）</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-cpp">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="n">string</span> <span class="n">s</span> <span class="o">=</span> <span class="s">&#34;abc&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">s</span> <span class="o">+=</span> <span class="s">&#34;def&#34;</span><span class="p">;</span>             <span class="c1">// 拼接
</span></span></span><span class="line"><span class="cl"><span class="n">s</span><span class="p">.</span><span class="n">substr</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span>         <span class="c1">// 取子串（位置,长度）
</span></span></span><span class="line"><span class="cl"><span class="n">s</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#34;cd&#34;</span><span class="p">);</span>           <span class="c1">// 查找（返回位置）
</span></span></span><span class="line"><span class="cl"><span class="n">stoi</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>                <span class="c1">// 字符串转数字
</span></span></span><span class="line"><span class="cl"><span class="n">s</span> <span class="o">=</span> <span class="n">to_string</span><span class="p">(</span><span class="mi">123</span><span class="p">);</span>     <span class="c1">// 数字转字符串
</span></span></span></code></pre></div></div>
<h2 id="3-priority_queue优先队列堆最小堆">3. priority_queue（优先队列/堆&ndash;最小堆）</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-cpp">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="n">priority_queue</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span> <span class="n">pq</span><span class="p">;</span>  <span class="c1">// 默认大根堆
</span></span></span><span class="line"><span class="cl"><span class="n">pq</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>             <span class="c1">// 插入
</span></span></span><span class="line"><span class="cl"><span class="n">pq</span><span class="p">.</span><span class="n">top</span><span class="p">();</span>               <span class="c1">// 取堆顶
</span></span></span><span class="line"><span class="cl"><span class="n">pq</span><span class="p">.</span><span class="n">pop</span><span class="p">();</span>               <span class="c1">// 弹出堆顶
</span></span></span><span class="line"><span class="cl"><span class="c1">// 小根堆定义
</span></span></span><span class="line"><span class="cl"><span class="n">priority_queue</span><span class="o">&lt;</span><span class="kt">int</span><span class="p">,</span> <span class="n">vector</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">greater</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;&gt;</span> <span class="n">min_pq</span><span class="p">;</span></span></span></code></pre></div></div>
<h2 id="41-map红黑树平衡二叉搜索树">4.(1). map（红黑树&ndash;平衡二叉搜索树）</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-cpp">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="n">map</span><span class="o">&lt;</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">&gt;</span> <span class="n">mp</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">mp</span><span class="p">[</span><span class="s">&#34;apple&#34;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">5</span><span class="p">;</span>        <span class="c1">// 插入/修改
</span></span></span><span class="line"><span class="cl"><span class="k">auto</span> <span class="n">it</span> <span class="o">=</span> <span class="n">mp</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#34;apple&#34;</span><span class="p">);</span>  <span class="c1">// 查找（返回迭代器）
</span></span></span></code></pre></div></div>
<h2 id="42-unordered_map哈希表数组--链表红黑树桶">4.(2). unordered_map（哈希表&ndash;数组 + 链表/红黑树桶）</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-cpp">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="n">unordered_map</span><span class="o">&lt;</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">&gt;</span> <span class="n">mp</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">mp</span><span class="p">[</span><span class="s">&#34;apple&#34;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">5</span><span class="p">;</span>        <span class="c1">// 插入/修改
</span></span></span><span class="line"><span class="cl"><span class="n">mp</span><span class="p">.</span><span class="n">count</span><span class="p">(</span><span class="s">&#34;apple&#34;</span><span class="p">);</span>      <span class="c1">// 判断是否存在
</span></span></span><span class="line"><span class="cl"><span class="n">mp</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="s">&#34;apple&#34;</span><span class="p">);</span>      <span class="c1">// 删除
</span></span></span><span class="line"><span class="cl"><span class="k">for</span><span class="p">(</span><span class="k">auto</span> <span class="o">&amp;</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">v</span><span class="p">]</span> <span class="o">:</span> <span class="n">mp</span><span class="p">)</span>   <span class="c1">// 遍历（C++17）
</span></span></span><span class="line"><span class="cl">    <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">k</span> <span class="o">&lt;&lt;</span> <span class="s">&#34; &#34;</span> <span class="o">&lt;&lt;</span> <span class="n">v</span><span class="p">;</span></span></span></code></pre></div></div>
<h2 id="5-set自动排序集合">5. set（自动排序集合）</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-cpp">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="n">set</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span> <span class="n">s</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">s</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>            <span class="c1">// 插入
</span></span></span><span class="line"><span class="cl"><span class="n">s</span><span class="p">.</span><span class="n">count</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>             <span class="c1">// 是否存在
</span></span></span><span class="line"><span class="cl"><span class="n">s</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>             <span class="c1">// 删除
</span></span></span><span class="line"><span class="cl"><span class="c1">// 自动排序，可直接用*s.begin()取最小值
</span></span></span></code></pre></div></div>
<h1 id="2-排序">2. 排序</h1>
<h2 id="最简模板">最简模板</h2>
<ol>
<li><strong>二分查找</strong></li>
</ol>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-cpp">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="n">sort</span><span class="p">(</span><span class="n">v</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">v</span><span class="p">.</span><span class="n">end</span><span class="p">());</span>
</span></span><span class="line"><span class="cl"><span class="k">auto</span> <span class="n">it</span> <span class="o">=</span> <span class="n">lower_bound</span><span class="p">(</span><span class="n">v</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">v</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">x</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span><span class="n">it</span> <span class="o">!=</span> <span class="n">v</span><span class="p">.</span><span class="n">end</span><span class="p">()</span> <span class="o">&amp;&amp;</span> <span class="o">*</span><span class="n">it</span> <span class="o">==</span> <span class="n">x</span><span class="p">)</span> <span class="c1">// 找到x
</span></span></span></code></pre></div></div>
<ol start="2">
<li><strong>自定义排序</strong>（贪心常用）</li>
</ol>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-cpp">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="kt">bool</span> <span class="nf">cmp</span><span class="p">(</span><span class="kt">int</span> <span class="n">a</span><span class="p">,</span> <span class="kt">int</span> <span class="n">b</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="n">a</span> <span class="o">&gt;</span> <span class="n">b</span><span class="p">;</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="n">sort</span><span class="p">(</span><span class="n">v</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">v</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">cmp</span><span class="p">);</span></span></span></code></pre></div></div>
<ol start="3">
<li><strong>结构体排序</strong></li>
</ol>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-cpp">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="k">struct</span> <span class="nc">Node</span> <span class="p">{</span> <span class="kt">int</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="n">vector</span><span class="o">&lt;</span><span class="n">Node</span><span class="o">&gt;</span> <span class="n">v</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">sort</span><span class="p">(</span><span class="n">v</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">v</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="p">[](</span><span class="n">Node</span> <span class="n">a</span><span class="p">,</span> <span class="n">Node</span> <span class="n">b</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">a</span><span class="p">.</span><span class="n">x</span> <span class="o">==</span> <span class="n">b</span><span class="p">.</span><span class="n">x</span> <span class="o">?</span> <span class="n">a</span><span class="p">.</span><span class="n">y</span> <span class="o">&lt;</span> <span class="n">b</span><span class="p">.</span><span class="nl">y</span> <span class="p">:</span> <span class="n">a</span><span class="p">.</span><span class="n">x</span> <span class="o">&gt;</span> <span class="n">b</span><span class="p">.</span><span class="n">x</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span></span></span></code></pre></div></div>
<p>💡 优先掌握 <code>vector</code> + <code>sort</code> + <code>priority_queue</code>，其他遇到现查即可！</p>]]></description></item><item><title>东油秦“代码织锦，智启星河”编程竞逐赛</title><link>https://home.y1xuanyun.cn/25cpp01-%E7%AE%97%E6%B3%95%E6%A0%A1%E8%B5%9B/</link><pubDate>Sun, 30 Mar 2025 18:00:00 +0800</pubDate><author>亦轩云</author><guid>https://home.y1xuanyun.cn/25cpp01-%E7%AE%97%E6%B3%95%E6%A0%A1%E8%B5%9B/</guid><description><![CDATA[<div class="hexo-note hexo-note-info hexo-note-flat">
该比赛圆满结束，比赛页面详见 <a href="https://www.luogu.com.cn/contest/238293" target="_blank" rel="noopener noreffer ">东油秦“代码织锦，智启星河”编程竞逐赛</a> 比赛邀请码：yxal
</div>

<h1 id="活动背景">活动背景</h1>
<p>在数字浪潮奔涌的时代，代码是编织未来的丝线，算法是叩击真理的密钥。为激发本校学子探索计算机科学的热情，提升逻辑思维与实践能力，东北石油大学秦皇岛校区大数据与计算机科学系特此举办编程竞赛，以赛促学、以技会友，于代码的方寸之间，窥见浩瀚星河。</p>]]></description></item><item><title>算法经典题型解析（C++）</title><link>https://home.y1xuanyun.cn/24cpp02-%E7%AE%97%E6%B3%95%E8%BF%9B%E9%98%B6/</link><pubDate>Sat, 01 Jun 2024 18:00:00 +0800</pubDate><author>亦轩云</author><guid>https://home.y1xuanyun.cn/24cpp02-%E7%AE%97%E6%B3%95%E8%BF%9B%E9%98%B6/</guid><description><![CDATA[<h1 id="前言">前言</h1>





<div class="hexo-note hexo-note-info hexo-note-flat">
本篇文稿为站长阶段性学习笔记，建议读者精通 C++包含 STL 并深入学习数据结构的前提下阅读。
</div>

<h1 id="滑动检索双指针前缀和">滑动检索/双指针/前缀和</h1>
<p>一般和数据结构中的队列相似，符合先进先出规则，区别为需不断更新处理数据</p>]]></description></item><item><title>算法基础导读（C++）</title><link>https://home.y1xuanyun.cn/24cpp01-%E7%AE%97%E6%B3%95%E5%9F%BA%E7%A1%80/</link><pubDate>Wed, 28 Feb 2024 18:00:00 +0800</pubDate><author>亦轩云</author><guid>https://home.y1xuanyun.cn/24cpp01-%E7%AE%97%E6%B3%95%E5%9F%BA%E7%A1%80/</guid><description><![CDATA[<h1 id="前言">前言</h1>





<div class="hexo-note hexo-note-info hexo-note-flat">
学习算法的前提是掌握至少一门编程语言，并对其语法和数据结构做到了如指掌，建议读者有 C 语言和基本的数据结构基础。
</div>

<h1 id="数据结构与算法">数据结构与算法</h1>
<ul>
<li>数据结构是算法的基石。数据结构为算法提供了结构化存储的数据，以及操作数据的方法。</li>
<li>算法是数据结构发挥作用的舞台。数据结构本身仅存储数据信息，结合算法才能解决特定问题。</li>
<li>算法通常可以基于不同的数据结构实现，但执行效率可能相差很大，选择合适的数据结构是关键。</li>
</ul>
<h1 id="c语法概要">C++语法概要</h1>
<p>C 语言为 C++子集，因此 C 语言涉及的语法部分将不再说明</p>]]></description></item></channel></rss>