繁体   English   中英

具有自定义字符串比较器的字符串的priority_queue的C ++向量

[英]C++ vector of priority_queue of strings with custom strings comparator

我有一个vector s的stringpriority_queue

vector<priority_queue<string>>> queues(VECTOR_CAPACITY);

问题是如何将自定义string比较器应用于那些priority_queue

如果这是相关的,我想要的比较器将较短的字符串放在较长的字符串之前,并且当它们相等的长度时使用标准字符串比较。

我这样尝试:

auto comparator = [] (string s1, string s2) { return s1.length() < s2.length() || s1 < s2; };
vector<priority_queue<string, vector<string>, decltype(comparator)>> queues(VECTOR_CAPACITY);

但它不会编译并显示以下错误:

 No matching constructor for initialization of 'value_compare' (aka '(lambda at Example.cpp:202:23)') 

编辑:比较器将较短的字符串放在较长的字符串之前,并且当它们相等的长度时使用标准的字典比较看起来像这样:

auto comparator = [] (string s1, string s2)
{
    if (s1.length() != s2.length())
    {
        return s1.length() > s2.length();
    }
    return s1.compare(s2) > 0;
};

您还需要将lambda的实例传递给std::priority_queue ,如下面的问答所述

using my_queue_t = std::priority_queue<
    std::string, std::vector<std::string>, decltype(comparator)>;

std::vector<myqueue_t> queues(VECTOR_SIZE, my_queue_t(comparator));

不幸的是, 复制列表初始化({comparator}在这里不起作用,因为第二个构造函数重载由于某种原因被显explicit标记。


我将VECTOR_CAPACITY更改为VECTOR_SIZE因为这就是参数的含义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM