{"id":13740,"date":"2024-03-15T07:47:55","date_gmt":"2024-03-15T07:47:55","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/"},"modified":"2025-08-05T22:49:30","modified_gmt":"2025-08-05T22:49:30","slug":"how-to-customize-a-priority-queue-in-c","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/","title":{"rendered":"Customize C++ Priority Queue"},"content":{"rendered":"<p>In C++, you can use the std::priority_queue class to implement a priority queue. By default, std::priority_queue uses std::less for comparison, meaning that the priority of elements is determined by the greatest element being placed at the front of the queue. If you want to customize the sorting rule of the priority queue, you can achieve this by using a custom comparison function or a custom class.<\/p>\n<p>Utilize a custom comparison function:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include<\/span> <span class=\"hljs-string\">&lt;iostream&gt;<\/span><\/span>\r\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include<\/span> <span class=\"hljs-string\">&lt;queue&gt;<\/span><\/span>\r\n\r\n<span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title class_\">CustomCompare<\/span> {\r\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\">int<\/span> a, <span class=\"hljs-type\">int<\/span> b)<\/span> <\/span>{\r\n        <span class=\"hljs-comment\">\/\/ \u81ea\u5b9a\u4e49\u6392\u5e8f\u89c4\u5219\uff0c\u6309\u7167\u5143\u7d20\u7684\u7edd\u5bf9\u503c\u5927\u5c0f\u8fdb\u884c\u6392\u5e8f<\/span>\r\n        <span class=\"hljs-keyword\">return<\/span> std::<span class=\"hljs-built_in\">abs<\/span>(a) &gt; std::<span class=\"hljs-built_in\">abs<\/span>(b);\r\n    }\r\n};\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-type\">int<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\r\n    std::priority_queue&lt;<span class=\"hljs-type\">int<\/span>, std::vector&lt;<span class=\"hljs-type\">int<\/span>&gt;, CustomCompare&gt; pq;\r\n    pq.<span class=\"hljs-built_in\">push<\/span>(<span class=\"hljs-number\">3<\/span>);\r\n    pq.<span class=\"hljs-built_in\">push<\/span>(<span class=\"hljs-number\">-5<\/span>);\r\n    pq.<span class=\"hljs-built_in\">push<\/span>(<span class=\"hljs-number\">2<\/span>);\r\n    pq.<span class=\"hljs-built_in\">push<\/span>(<span class=\"hljs-number\">-1<\/span>);\r\n\r\n    <span class=\"hljs-keyword\">while<\/span> (!pq.<span class=\"hljs-built_in\">empty<\/span>()) {\r\n        std::cout &lt;&lt; pq.<span class=\"hljs-built_in\">top<\/span>() &lt;&lt; <span class=\"hljs-string\">\" \"<\/span>;\r\n        pq.<span class=\"hljs-built_in\">pop<\/span>();\r\n    }\r\n\r\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">0<\/span>;\r\n}\r\n<\/code><\/pre>\n<p>Output result:<\/p>\n<pre class=\"post-pre\"><code>-5 3 -1 2\r\n<\/code><\/pre>\n<p>Utilizing custom classes:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include<\/span> <span class=\"hljs-string\">&lt;iostream&gt;<\/span><\/span>\r\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include<\/span> <span class=\"hljs-string\">&lt;queue&gt;<\/span><\/span>\r\n\r\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">MyClass<\/span> {\r\n<span class=\"hljs-keyword\">public<\/span>:\r\n    <span class=\"hljs-type\">int<\/span> value;\r\n    \r\n    <span class=\"hljs-built_in\">MyClass<\/span>(<span class=\"hljs-type\">int<\/span> v) : <span class=\"hljs-built_in\">value<\/span>(v) {}\r\n};\r\n\r\n<span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title class_\">CustomCompare<\/span> {\r\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> MyClass&amp; a, <span class=\"hljs-type\">const<\/span> MyClass&amp; b)<\/span> <\/span>{\r\n        <span class=\"hljs-comment\">\/\/ \u81ea\u5b9a\u4e49\u6392\u5e8f\u89c4\u5219\uff0c\u6309\u7167\u5143\u7d20\u7684value\u8fdb\u884c\u6392\u5e8f<\/span>\r\n        <span class=\"hljs-keyword\">return<\/span> a.value &gt; b.value;\r\n    }\r\n};\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-type\">int<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\r\n    std::priority_queue&lt;MyClass, std::vector&lt;MyClass&gt;, CustomCompare&gt; pq;\r\n    pq.<span class=\"hljs-built_in\">push<\/span>(<span class=\"hljs-built_in\">MyClass<\/span>(<span class=\"hljs-number\">3<\/span>));\r\n    pq.<span class=\"hljs-built_in\">push<\/span>(<span class=\"hljs-built_in\">MyClass<\/span>(<span class=\"hljs-number\">-5<\/span>));\r\n    pq.<span class=\"hljs-built_in\">push<\/span>(<span class=\"hljs-built_in\">MyClass<\/span>(<span class=\"hljs-number\">2<\/span>));\r\n    pq.<span class=\"hljs-built_in\">push<\/span>(<span class=\"hljs-built_in\">MyClass<\/span>(<span class=\"hljs-number\">-1<\/span>));\r\n\r\n    <span class=\"hljs-keyword\">while<\/span> (!pq.<span class=\"hljs-built_in\">empty<\/span>()) {\r\n        std::cout &lt;&lt; pq.<span class=\"hljs-built_in\">top<\/span>().value &lt;&lt; <span class=\"hljs-string\">\" \"<\/span>;\r\n        pq.<span class=\"hljs-built_in\">pop<\/span>();\r\n    }\r\n\r\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">0<\/span>;\r\n}\r\n<\/code><\/pre>\n<p>The output result:<\/p>\n<pre class=\"post-pre\"><code>-5 -1 2 3\r\n<\/code><\/pre>\n<p>By defining your own comparison function or class, you can implement custom sorting rules for a priority queue.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In C++, you can use the std::priority_queue class to implement a priority queue. By default, std::priority_queue uses std::less for comparison, meaning that the priority of elements is determined by the greatest element being placed at the front of the queue. If you want to customize the sorting rule of the priority queue, you can achieve [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[274,18397,224,228,5213],"class_list":["post-13740","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-c","tag-custom-comparator","tag-data-structures","tag-priority-queue","tag-stl-containers"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Customize C++ Priority Queue - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"Learn to customize C++ priority queues with comparators. Step-by-step implementation guide with code examples.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Customize C++ Priority Queue\" \/>\n<meta property=\"og:description\" content=\"Learn to customize C++ priority queues with comparators. Step-by-step implementation guide with code examples.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-15T07:47:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-05T22:49:30+00:00\" \/>\n<meta name=\"author\" content=\"Olivia Parker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Olivia Parker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/\"},\"author\":{\"name\":\"Olivia Parker\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9\"},\"headline\":\"Customize C++ Priority Queue\",\"datePublished\":\"2024-03-15T07:47:55+00:00\",\"dateModified\":\"2025-08-05T22:49:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/\"},\"wordCount\":106,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"keywords\":[\"c#\",\"custom comparator\",\"data structures\",\"priority queue\",\"STL containers\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/\",\"name\":\"Customize C++ Priority Queue - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T07:47:55+00:00\",\"dateModified\":\"2025-08-05T22:49:30+00:00\",\"description\":\"Learn to customize C++ priority queues with comparators. Step-by-step implementation guide with code examples.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Customize C++ Priority Queue\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9\",\"name\":\"Olivia Parker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g\",\"caption\":\"Olivia Parker\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/oliviaparker\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Customize C++ Priority Queue - Blog - Silicon Cloud","description":"Learn to customize C++ priority queues with comparators. Step-by-step implementation guide with code examples.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/","og_locale":"en_US","og_type":"article","og_title":"Customize C++ Priority Queue","og_description":"Learn to customize C++ priority queues with comparators. Step-by-step implementation guide with code examples.","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T07:47:55+00:00","article_modified_time":"2025-08-05T22:49:30+00:00","author":"Olivia Parker","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Olivia Parker","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/"},"author":{"name":"Olivia Parker","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9"},"headline":"Customize C++ Priority Queue","datePublished":"2024-03-15T07:47:55+00:00","dateModified":"2025-08-05T22:49:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/"},"wordCount":106,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"keywords":["c#","custom comparator","data structures","priority queue","STL containers"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/","name":"Customize C++ Priority Queue - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T07:47:55+00:00","dateModified":"2025-08-05T22:49:30+00:00","description":"Learn to customize C++ priority queues with comparators. Step-by-step implementation guide with code examples.","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-customize-a-priority-queue-in-c\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Customize C++ Priority Queue"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9","name":"Olivia Parker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g","caption":"Olivia Parker"},"url":"https:\/\/www.silicloud.com\/blog\/author\/oliviaparker\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/13740","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=13740"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/13740\/revisions"}],"predecessor-version":[{"id":157744,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/13740\/revisions\/157744"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=13740"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=13740"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=13740"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}