[C/C++]_[初级]_[std::priority_queue的介绍]

本文深入探讨了C++标准库中的std::priority_queue容器,包括其特性和使用方法。文章详细介绍了如何自定义比较函数,实现复杂数据类型的排序,并通过实例展示了整数和日期的比较过程。

场景

  1. 有时候我们需要一个容器, 在插入时能按照指定的顺序排列, 从而在元素全部插入后, 或者删除某个元素时不需要重新对容器进行sort.

  2. std::vectorstd::queue 不具备这种特性. std::map的key具备这种特性, 但是缺点就是不能进行复杂的比较. std::map的使用细节

说明

  1. std::priority_queue 可以在进行插入数据时就进行比较并排序. 可以指定复杂的排序. 缺点就是只支持一次性枚举, 如果需要枚举std::priority_queue, 那么需要类似于queue的特性那样pop出来.

  2. std::priority_queue 提供常量的时间复杂度查询最大值. 插入和提取的时间复杂度是 对数时间(logarithmic time).

  3. Compare比较器如果使用std::greater<T>时, 最小的元素出现在top位置. 比较器使用strict weak ordering..

Establishes strict weak ordering relation with the following properties
For all a, comp(a,a)==false
If comp(a,b)==true then comp(b,a)==false
if comp(a,b)==true and comp(b,c)==true then comp(a,c)==true

例子

  1. 以下对整数比较, 日期比较的 std::priority_queue.

图示


template<typename T>
class A
{
public:
	std::basic_string<T> date;

};

// https://en.cppreference.com/w/cpp/named_req/Compare
// https://en.cppreference.com/w/cpp/container/priority_queue
void TestPriorityQueue()
{
	std::priority_queue<int> q;
	srand(time(NULL));
	for(int i = 0; i< 10; ++i)
		q.push(rand());

	auto q1 = q; // 如果需要继续使用 std::priority_queue 容器数据, 需要复制.
	print_queue(q); // 打印或者说枚举 queue 里的元素, 需要 pop 出元素. 也就是只能枚举一次.

	// 自定义比较函数
	typedef A<wchar_t> A1;
	auto Func = [](const A1& first, const A1& second)->bool{
		return first.date < second.date;
	};
	std::priority_queue<A1,std::vector<A1>,decltype(Func)> a_queue;
	long long temp = 20181001;
	for(int i = 0; i< 10;++i){
		A1 a;
		a.date = std::to_wstring(temp+i);
		a_queue.push(a);
	}
	
	while(!a_queue.empty()) {
		std::wcout << a_queue.top().date << L" ";
		a_queue.pop();
	}
	std::wcout << L'\n';
}

输出

31180 28104 24260 23942 21404 19083 11173 8284 6993 567
20181010 20181009 20181008 20181007 20181006 20181005 20181004 20181003 20181002
 20181001

参考

C++ named requirements: Compare
std::priority_queue

#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin >> T; while (T--) { int n; long long k; cin >> n >> k; vector<long long> x(n); for (int i = 0; i < n; ++i) { cin >> x[i]; } priority_queue<long long> pq; for (long long v : x) { pq.push(v); } for (int i = 0; i < k; ++i) { if (pq.empty()) break; long long top = pq.top(); if (top <= 0) break; pq.pop(); pq.push(top - 2); } long long rg = 0; while (!pq.empty()) { long long r = pq.top(); pq.pop(); if (r > 0) rg += r; } cout << rg <= k ? "yes" : "no" << '\n'; } return 0; } 报错:编译失败 main.cpp: In function 'int main()': main.cpp:32:20: error: no match for 'operator<=' (operand types are 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} and 'long long int') 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ~~~~~~~~~~ ^~ ~ | | | | | long long int | std::basic_ostream<char>::__ostream_type {aka std::basic_ostream<char>} main.cpp:32:20: note: candidate: 'operator<=(int, long long int)' <built-in> 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ~~~~~~~~~~~^~~~ main.cpp:32:20: note: no known conversion for argument 1 from 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} to 'int' In file included from /usr/include/c++/9/regex:62, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110, from main.cpp:1: /usr/include/c++/9/bits/regex.h:1059:5: note: candidate: 'template<class _BiIter> bool std::__cxx11::operator<=(const std::__cxx11::sub_match<_BiIter>&, const std::__cxx11::sub_match<_BiIter>&)' 1059 | operator<=(const sub_match<_BiIter>& __lhs, const sub_match<_BiIter>& __rhs) | ^~~~~~~~ /usr/include/c++/9/bits/regex.h:1059:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::__cxx11::sub_match<_BiIter>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/regex:62, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110, from main.cpp:1: /usr/include/c++/9/bits/regex.h:1160:5: note: candidate: 'template<class _Bi_iter, class _Ch_traits, class _Ch_alloc> bool std::__cxx11::operator<=(std::__cxx11::__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>&, const std::__cxx11::sub_match<_BiIter>&)' 1160 | operator<=(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs, | ^~~~~~~~ /usr/include/c++/9/bits/regex.h:1160:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'std::__cxx11::__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/regex:62, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110, from main.cpp:1: /usr/include/c++/9/bits/regex.h:1234:5: note: candidate: 'template<class _Bi_iter, class _Ch_traits, class _Ch_alloc> bool std::__cxx11::operator<=(const std::__cxx11::sub_match<_BiIter>&, std::__cxx11::__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>&)' 1234 | operator<=(const sub_match<_Bi_iter>& __lhs, | ^~~~~~~~ /usr/include/c++/9/bits/regex.h:1234:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::__cxx11::sub_match<_BiIter>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/regex:62, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110, from main.cpp:1: /usr/include/c++/9/bits/regex.h:1308:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator<=(const typename std::iterator_traits<_Iter>::value_type*, const std::__cxx11::sub_match<_BiIter>&)' 1308 | operator<=(typename iterator_traits<_Bi_iter>::value_type const* __lhs, | ^~~~~~~~ /usr/include/c++/9/bits/regex.h:1308:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: mismatched types 'const std::__cxx11::sub_match<_BiIter>' and 'long long int' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/regex:62, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110, from main.cpp:1: /usr/include/c++/9/bits/regex.h:1382:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator<=(const std::__cxx11::sub_match<_BiIter>&, const typename std::iterator_traits<_Iter>::value_type*)' 1382 | operator<=(const sub_match<_Bi_iter>& __lhs, | ^~~~~~~~ /usr/include/c++/9/bits/regex.h:1382:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::__cxx11::sub_match<_BiIter>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/regex:62, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110, from main.cpp:1: /usr/include/c++/9/bits/regex.h:1460:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator<=(const typename std::iterator_traits<_Iter>::value_type&, const std::__cxx11::sub_match<_BiIter>&)' 1460 | operator<=(typename iterator_traits<_Bi_iter>::value_type const& __lhs, | ^~~~~~~~ /usr/include/c++/9/bits/regex.h:1460:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: mismatched types 'const std::__cxx11::sub_match<_BiIter>' and 'long long int' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/regex:62, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110, from main.cpp:1: /usr/include/c++/9/bits/regex.h:1538:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator<=(const std::__cxx11::sub_match<_BiIter>&, const typename std::iterator_traits<_Iter>::value_type&)' 1538 | operator<=(const sub_match<_Bi_iter>& __lhs, | ^~~~~~~~ /usr/include/c++/9/bits/regex.h:1538:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::__cxx11::sub_match<_BiIter>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/stl_algobase.h:64, from /usr/include/c++/9/bits/specfun.h:45, from /usr/include/c++/9/cmath:1927, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:41, from main.cpp:1: /usr/include/c++/9/bits/stl_pair.h:473:5: note: candidate: 'template<class _T1, class _T2> constexpr bool std::operator<=(const std::pair<_T1, _T2>&, const std::pair<_T1, _T2>&)' 473 | operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) | ^~~~~~~~ /usr/include/c++/9/bits/stl_pair.h:473:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::pair<_T1, _T2>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/stl_algobase.h:67, from /usr/include/c++/9/bits/specfun.h:45, from /usr/include/c++/9/cmath:1927, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:41, from main.cpp:1: /usr/include/c++/9/bits/stl_iterator.h:349:5: note: candidate: 'template<class _Iterator> constexpr bool std::operator<=(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)' 349 | operator<=(const reverse_iterator<_Iterator>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_iterator.h:349:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::reverse_iterator<_Iterator>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/stl_algobase.h:67, from /usr/include/c++/9/bits/specfun.h:45, from /usr/include/c++/9/cmath:1927, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:41, from main.cpp:1: /usr/include/c++/9/bits/stl_iterator.h:387:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr bool std::operator<=(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_IteratorR>&)' 387 | operator<=(const reverse_iterator<_IteratorL>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_iterator.h:387:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::reverse_iterator<_Iterator>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/stl_algobase.h:67, from /usr/include/c++/9/bits/specfun.h:45, from /usr/include/c++/9/cmath:1927, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:41, from main.cpp:1: /usr/include/c++/9/bits/stl_iterator.h:1172:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr bool std::operator<=(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorR>&)' 1172 | operator<=(const move_iterator<_IteratorL>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_iterator.h:1172:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::move_iterator<_IteratorL>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/stl_algobase.h:67, from /usr/include/c++/9/bits/specfun.h:45, from /usr/include/c++/9/cmath:1927, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:41, from main.cpp:1: /usr/include/c++/9/bits/stl_iterator.h:1178:5: note: candidate: 'template<class _Iterator> constexpr bool std::operator<=(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorL>&)' 1178 | operator<=(const move_iterator<_Iterator>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_iterator.h:1178:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::move_iterator<_IteratorL>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/basic_string.h:48, from /usr/include/c++/9/string:55, from /usr/include/c++/9/bits/locale_classes.h:40, from /usr/include/c++/9/bits/ios_base.h:41, from /usr/include/c++/9/ios:42, from /usr/include/c++/9/istream:38, from /usr/include/c++/9/sstream:38, from /usr/include/c++/9/complex:45, from /usr/include/c++/9/ccomplex:39, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54, from main.cpp:1: /usr/include/c++/9/string_view:543:5: note: candidate: 'template<class _CharT, class _Traits> constexpr bool std::operator<=(std::basic_string_view<_CharT, _Traits>, std::basic_string_view<_CharT, _Traits>)' 543 | operator<=(basic_string_view<_CharT, _Traits> __x, | ^~~~~~~~ /usr/include/c++/9/string_view:543:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>' is not derived from 'std::basic_string_view<_CharT, _Traits>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/basic_string.h:48, from /usr/include/c++/9/string:55, from /usr/include/c++/9/bits/locale_classes.h:40, from /usr/include/c++/9/bits/ios_base.h:41, from /usr/include/c++/9/ios:42, from /usr/include/c++/9/istream:38, from /usr/include/c++/9/sstream:38, from /usr/include/c++/9/complex:45, from /usr/include/c++/9/ccomplex:39, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54, from main.cpp:1: /usr/include/c++/9/string_view:549:5: note: candidate: 'template<class _CharT, class _Traits> constexpr bool std::operator<=(std::basic_string_view<_CharT, _Traits>, std::__detail::__idt<std::basic_string_view<_CharT, _Traits> >)' 549 | operator<=(basic_string_view<_CharT, _Traits> __x, | ^~~~~~~~ /usr/include/c++/9/string_view:549:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>' is not derived from 'std::basic_string_view<_CharT, _Traits>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/basic_string.h:48, from /usr/include/c++/9/string:55, from /usr/include/c++/9/bits/locale_classes.h:40, from /usr/include/c++/9/bits/ios_base.h:41, from /usr/include/c++/9/ios:42, from /usr/include/c++/9/istream:38, from /usr/include/c++/9/sstream:38, from /usr/include/c++/9/complex:45, from /usr/include/c++/9/ccomplex:39, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54, from main.cpp:1: /usr/include/c++/9/string_view:555:5: note: candidate: 'template<class _CharT, class _Traits> constexpr bool std::operator<=(std::__detail::__idt<std::basic_string_view<_CharT, _Traits> >, std::basic_string_view<_CharT, _Traits>)' 555 | operator<=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x, | ^~~~~~~~ /usr/include/c++/9/string_view:555:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: mismatched types 'std::basic_string_view<_CharT, _Traits>' and 'long long int' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/string:55, from /usr/include/c++/9/bits/locale_classes.h:40, from /usr/include/c++/9/bits/ios_base.h:41, from /usr/include/c++/9/ios:42, from /usr/include/c++/9/istream:38, from /usr/include/c++/9/sstream:38, from /usr/include/c++/9/complex:45, from /usr/include/c++/9/ccomplex:39, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54, from main.cpp:1: /usr/include/c++/9/bits/basic_string.h:6305:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator<=(const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>&, const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>&)' 6305 | operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, | ^~~~~~~~ /usr/include/c++/9/bits/basic_string.h:6305:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/string:55, from /usr/include/c++/9/bits/locale_classes.h:40, from /usr/include/c++/9/bits/ios_base.h:41, from /usr/include/c++/9/ios:42, from /usr/include/c++/9/istream:38, from /usr/include/c++/9/sstream:38, from /usr/include/c++/9/complex:45, from /usr/include/c++/9/ccomplex:39, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54, from main.cpp:1: /usr/include/c++/9/bits/basic_string.h:6318:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator<=(const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>&, const _CharT*)' 6318 | operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, | ^~~~~~~~ /usr/include/c++/9/bits/basic_string.h:6318:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/string:55, from /usr/include/c++/9/bits/locale_classes.h:40, from /usr/include/c++/9/bits/ios_base.h:41, from /usr/include/c++/9/ios:42, from /usr/include/c++/9/istream:38, from /usr/include/c++/9/sstream:38, from /usr/include/c++/9/complex:45, from /usr/include/c++/9/ccomplex:39, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54, from main.cpp:1: /usr/include/c++/9/bits/basic_string.h:6330:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator<=(const _CharT*, const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>&)' 6330 | operator<=(const _CharT* __lhs, | ^~~~~~~~ /usr/include/c++/9/bits/basic_string.h:6330:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: mismatched types 'const _CharT*' and 'std::basic_ostream<char>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/tuple:39, from /usr/include/c++/9/functional:54, from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13, from /usr/include/c++/9/algorithm:71, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65, from main.cpp:1: /usr/include/c++/9/array:275:5: note: candidate: 'template<class _Tp, long unsigned int _Nm> bool std::operator<=(const std::array<_Tp, _Nm>&, const std::array<_Tp, _Nm>&)' 275 | operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) | ^~~~~~~~ /usr/include/c++/9/array:275:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::array<_Tp, _Nm>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/functional:54, from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13, from /usr/include/c++/9/algorithm:71, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65, from main.cpp:1: /usr/include/c++/9/tuple:1457:5: note: candidate: 'template<class ... _TElements, class ... _UElements> constexpr bool std::operator<=(const std::tuple<_Tps ...>&, const std::tuple<_Elements ...>&)' 1457 | operator<=(const tuple<_TElements...>& __t, | ^~~~~~~~ /usr/include/c++/9/tuple:1457:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::tuple<_Tps ...>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/node_handle.h:39, from /usr/include/c++/9/bits/hashtable.h:37, from /usr/include/c++/9/unordered_map:46, from /usr/include/c++/9/functional:61, from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13, from /usr/include/c++/9/algorithm:71, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65, from main.cpp:1: /usr/include/c++/9/optional:1017:5: note: candidate: 'template<class _Tp, class _Up> constexpr std::__optional_relop_t<decltype ((declval<_Tp>() <= declval<_Up>()))> std::operator<=(const std::optional<_Tp>&, const std::optional<_Up>&)' 1017 | operator<=(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) | ^~~~~~~~ /usr/include/c++/9/optional:1017:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::optional<_Tp>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/node_handle.h:39, from /usr/include/c++/9/bits/hashtable.h:37, from /usr/include/c++/9/unordered_map:46, from /usr/include/c++/9/functional:61, from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13, from /usr/include/c++/9/algorithm:71, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65, from main.cpp:1: /usr/include/c++/9/optional:1074:5: note: candidate: 'template<class _Tp> constexpr bool std::operator<=(const std::optional<_Tp>&, std::nullopt_t)' 1074 | operator<=(const optional<_Tp>& __lhs, nullopt_t) noexcept | ^~~~~~~~ /usr/include/c++/9/optional:1074:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::optional<_Tp>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/node_handle.h:39, from /usr/include/c++/9/bits/hashtable.h:37, from /usr/include/c++/9/unordered_map:46, from /usr/include/c++/9/functional:61, from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13, from /usr/include/c++/9/algorithm:71, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65, from main.cpp:1: /usr/include/c++/9/optional:1079:5: note: candidate: 'template<class _Tp> constexpr bool std::operator<=(std::nullopt_t, const std::optional<_Tp>&)' 1079 | operator<=(nullopt_t, const optional<_Tp>& /* __rhs */) noexcept | ^~~~~~~~ /usr/include/c++/9/optional:1079:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: mismatched types 'const std::optional<_Tp>' and 'long long int' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/node_handle.h:39, from /usr/include/c++/9/bits/hashtable.h:37, from /usr/include/c++/9/unordered_map:46, from /usr/include/c++/9/functional:61, from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13, from /usr/include/c++/9/algorithm:71, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65, from main.cpp:1: /usr/include/c++/9/optional:1143:5: note: candidate: 'template<class _Tp, class _Up> constexpr std::__optional_relop_t<decltype ((declval<_Tp>() <= declval<_Up>()))> std::operator<=(const std::optional<_Tp>&, const _Up&)' 1143 | operator<=(const optional<_Tp>& __lhs, const _Up& __rhs) | ^~~~~~~~ /usr/include/c++/9/optional:1143:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::optional<_Tp>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/node_handle.h:39, from /usr/include/c++/9/bits/hashtable.h:37, from /usr/include/c++/9/unordered_map:46, from /usr/include/c++/9/functional:61, from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13, from /usr/include/c++/9/algorithm:71, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65, from main.cpp:1: /usr/include/c++/9/optional:1149:5: note: candidate: 'template<class _Tp, class _Up> constexpr std::__optional_relop_t<decltype ((declval<_Up>() <= declval<_Tp>()))> std::operator<=(const _Up&, const std::optional<_Tp>&)' 1149 | operator<=(const _Up& __lhs, const optional<_Tp>& __rhs) | ^~~~~~~~ /usr/include/c++/9/optional:1149:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: mismatched types 'const std::optional<_Tp>' and 'long long int' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/vector:67, from /usr/include/c++/9/functional:62, from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13, from /usr/include/c++/9/algorithm:71, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65, from main.cpp:1: /usr/include/c++/9/bits/stl_vector.h:1924:5: note: candidate: 'template<class _Tp, class _Alloc> bool std::operator<=(const std::vector<_Tp, _Alloc>&, const std::vector<_Tp, _Alloc>&)' 1924 | operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) | ^~~~~~~~ /usr/include/c++/9/bits/stl_vector.h:1924:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::vector<_Tp, _Alloc>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/deque:67, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:68, from main.cpp:1: /usr/include/c++/9/bits/stl_deque.h:340:5: note: candidate: 'template<class _Tp, class _Ref, class _Ptr> bool std::operator<=(const std::_Deque_iterator<_Tp, _Ref, _Ptr>&, const std::_Deque_iterator<_Tp, _Ref, _Ptr>&)' 340 | operator<=(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_deque.h:340:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::_Deque_iterator<_Tp, _Ref, _Ptr>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/deque:67, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:68, from main.cpp:1: /usr/include/c++/9/bits/stl_deque.h:347:5: note: candidate: 'template<class _Tp, class _RefL, class _PtrL, class _RefR, class _PtrR> bool std::operator<=(const std::_Deque_iterator<_Tp, _Ref, _Ptr>&, const std::_Deque_iterator<_Tp, _RefR, _PtrR>&)' 347 | operator<=(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_deque.h:347:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::_Deque_iterator<_Tp, _Ref, _Ptr>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/deque:67, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:68, from main.cpp:1: /usr/include/c++/9/bits/stl_deque.h:2352:5: note: candidate: 'template<class _Tp, class _Alloc> bool std::operator<=(const std::deque<_Tp, _Alloc>&, const std::deque<_Tp, _Alloc>&)' 2352 | operator<=(const deque<_Tp, _Alloc>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_deque.h:2352:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::deque<_Tp, _Alloc>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/locale_conv.h:41, from /usr/include/c++/9/locale:43, from /usr/include/c++/9/iomanip:43, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:72, from main.cpp:1: /usr/include/c++/9/bits/unique_ptr.h:773:5: note: candidate: 'template<class _Tp, class _Dp, class _Up, class _Ep> bool std::operator<=(const std::unique_ptr<_Tp, _Dp>&, const std::unique_ptr<_Up, _Ep>&)' 773 | operator<=(const unique_ptr<_Tp, _Dp>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/unique_ptr.h:773:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::unique_ptr<_Tp, _Dp>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/locale_conv.h:41, from /usr/include/c++/9/locale:43, from /usr/include/c++/9/iomanip:43, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:72, from main.cpp:1: /usr/include/c++/9/bits/unique_ptr.h:779:5: note: candidate: 'template<class _Tp, class _Dp> bool std::operator<=(const std::unique_ptr<_Tp, _Dp>&, std::nullptr_t)' 779 | operator<=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) | ^~~~~~~~ /usr/include/c++/9/bits/unique_ptr.h:779:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::unique_ptr<_Tp, _Dp>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/locale_conv.h:41, from /usr/include/c++/9/locale:43, from /usr/include/c++/9/iomanip:43, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:72, from main.cpp:1: /usr/include/c++/9/bits/unique_ptr.h:784:5: note: candidate: 'template<class _Tp, class _Dp> bool std::operator<=(std::nullptr_t, const std::unique_ptr<_Tp, _Dp>&)' 784 | operator<=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) | ^~~~~~~~ /usr/include/c++/9/bits/unique_ptr.h:784:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: mismatched types 'const std::unique_ptr<_Tp, _Dp>' and 'long long int' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/list:63, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:79, from main.cpp:1: /usr/include/c++/9/bits/stl_list.h:2044:5: note: candidate: 'template<class _Tp, class _Alloc> bool std::operator<=(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&)' 2044 | operator<=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) | ^~~~~~~~ /usr/include/c++/9/bits/stl_list.h:2044:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::__cxx11::list<_Tp, _Alloc>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/map:61, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:81, from main.cpp:1: /usr/include/c++/9/bits/stl_map.h:1493:5: note: candidate: 'template<class _Key, class _Tp, class _Compare, class _Alloc> bool std::operator<=(const std::map<_Key, _Tp, _Compare, _Allocator>&, const std::map<_Key, _Tp, _Compare, _Allocator>&)' 1493 | operator<=(const map<_Key, _Tp, _Compare, _Alloc>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_map.h:1493:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::map<_Key, _Tp, _Compare, _Allocator>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/map:62, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:81, from main.cpp:1: /usr/include/c++/9/bits/stl_multimap.h:1157:5: note: candidate: 'template<class _Key, class _Tp, class _Compare, class _Alloc> bool std::operator<=(const std::multimap<_Key, _Tp, _Compare, _Allocator>&, const std::multimap<_Key, _Tp, _Compare, _Allocator>&)' 1157 | operator<=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_multimap.h:1157:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::multimap<_Key, _Tp, _Compare, _Allocator>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/shared_ptr.h:52, from /usr/include/c++/9/memory:81, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:82, from main.cpp:1: /usr/include/c++/9/bits/shared_ptr_base.h:1471:5: note: candidate: 'template<class _Tp1, class _Tp2, __gnu_cxx::_Lock_policy _Lp> bool std::operator<=(const std::__shared_ptr<_Tp1, _Lp>&, const std::__shared_ptr<_Tp2, _Lp>&)' 1471 | operator<=(const __shared_ptr<_Tp1, _Lp>& __a, | ^~~~~~~~ /usr/include/c++/9/bits/shared_ptr_base.h:1471:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::__shared_ptr<_Tp1, _Lp>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/shared_ptr.h:52, from /usr/include/c++/9/memory:81, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:82, from main.cpp:1: /usr/include/c++/9/bits/shared_ptr_base.h:1477:5: note: candidate: 'template<class _Tp, __gnu_cxx::_Lock_policy _Lp> bool std::operator<=(const std::__shared_ptr<_Tp, _Lp>&, std::nullptr_t)' 1477 | operator<=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/shared_ptr_base.h:1477:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::__shared_ptr<_Tp, _Lp>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/bits/shared_ptr.h:52, from /usr/include/c++/9/memory:81, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:82, from main.cpp:1: /usr/include/c++/9/bits/shared_ptr_base.h:1482:5: note: candidate: 'template<class _Tp, __gnu_cxx::_Lock_policy _Lp> bool std::operator<=(std::nullptr_t, const std::__shared_ptr<_Tp, _Lp>&)' 1482 | operator<=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/shared_ptr_base.h:1482:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: mismatched types 'const std::__shared_ptr<_Tp, _Lp>' and 'long long int' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/memory:81, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:82, from main.cpp:1: /usr/include/c++/9/bits/shared_ptr.h:439:5: note: candidate: 'template<class _Tp, class _Up> bool std::operator<=(const std::shared_ptr<_Tp>&, const std::shared_ptr<_Tp>&)' 439 | operator<=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/shared_ptr.h:439:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::shared_ptr<_Tp>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/memory:81, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:82, from main.cpp:1: /usr/include/c++/9/bits/shared_ptr.h:444:5: note: candidate: 'template<class _Tp> bool std::operator<=(const std::shared_ptr<_Tp>&, std::nullptr_t)' 444 | operator<=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/shared_ptr.h:444:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::shared_ptr<_Tp>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/memory:81, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:82, from main.cpp:1: /usr/include/c++/9/bits/shared_ptr.h:449:5: note: candidate: 'template<class _Tp> bool std::operator<=(std::nullptr_t, const std::shared_ptr<_Tp>&)' 449 | operator<=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/shared_ptr.h:449:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: mismatched types 'const std::shared_ptr<_Tp>' and 'long long int' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/queue:64, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:86, from main.cpp:1: /usr/include/c++/9/bits/stl_queue.h:374:5: note: candidate: 'template<class _Tp, class _Seq> bool std::operator<=(const std::queue<_Tp, _Seq>&, const std::queue<_Tp, _Seq>&)' 374 | operator<=(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y) | ^~~~~~~~ /usr/include/c++/9/bits/stl_queue.h:374:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::queue<_Tp, _Seq>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/set:61, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:87, from main.cpp:1: /usr/include/c++/9/bits/stl_set.h:1017:5: note: candidate: 'template<class _Key, class _Compare, class _Alloc> bool std::operator<=(const std::set<_Key, _Compare, _Allocator>&, const std::set<_Key, _Compare, _Allocator>&)' 1017 | operator<=(const set<_Key, _Compare, _Alloc>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_set.h:1017:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::set<_Key, _Compare, _Allocator>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/set:62, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:87, from main.cpp:1: /usr/include/c++/9/bits/stl_multiset.h:1002:5: note: candidate: 'template<class _Key, class _Compare, class _Alloc> bool std::operator<=(const std::multiset<_Key, _Compare, _Allocator>&, const std::multiset<_Key, _Compare, _Allocator>&)' 1002 | operator<=(const multiset<_Key, _Compare, _Alloc>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_multiset.h:1002:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::multiset<_Key, _Compare, _Allocator>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/stack:61, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:89, from main.cpp:1: /usr/include/c++/9/bits/stl_stack.h:349:5: note: candidate: 'template<class _Tp, class _Seq> bool std::operator<=(const std::stack<_Tp, _Seq>&, const std::stack<_Tp, _Seq>&)' 349 | operator<=(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y) | ^~~~~~~~ /usr/include/c++/9/bits/stl_stack.h:349:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::stack<_Tp, _Seq>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/valarray:603, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:95, from main.cpp:1: /usr/include/c++/9/bits/valarray_after.h:421:5: note: candidate: 'template<class _Dom1, class _Dom2> std::_Expr<std::__detail::_BinClos<std::__less_equal, std::_Expr, std::_Expr, _Dom1, _Dom2>, typename std::__fun<std::__less_equal, typename _Dom1::value_type>::result_type> std::operator<=(const std::_Expr<_Dom1, typename _Dom1::value_type>&, const std::_Expr<_Dom2, typename _Dom2::value_type>&)' 421 | _DEFINE_EXPR_BINARY_OPERATOR(<=, __less_equal) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/9/bits/valarray_after.h:421:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/valarray:603, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:95, from main.cpp:1: /usr/include/c++/9/bits/valarray_after.h:421:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__less_equal, std::_Expr, std::_Constant, _Dom, typename _Dom::value_type>, typename std::__fun<std::__less_equal, typename _Dom1::value_type>::result_type> std::operator<=(const std::_Expr<_Dom1, typename _Dom1::value_type>&, const typename _Dom::value_type&)' 421 | _DEFINE_EXPR_BINARY_OPERATOR(<=, __less_equal) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/9/bits/valarray_after.h:421:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/valarray:603, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:95, from main.cpp:1: /usr/include/c++/9/bits/valarray_after.h:421:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__less_equal, std::_Constant, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__less_equal, typename _Dom1::value_type>::result_type> std::operator<=(const typename _Dom::value_type&, const std::_Expr<_Dom1, typename _Dom1::value_type>&)' 421 | _DEFINE_EXPR_BINARY_OPERATOR(<=, __less_equal) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/9/bits/valarray_after.h:421:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: mismatched types 'const std::_Expr<_Dom1, typename _Dom1::value_type>' and 'long long int' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/valarray:603, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:95, from main.cpp:1: /usr/include/c++/9/bits/valarray_after.h:421:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__less_equal, std::_Expr, std::_ValArray, _Dom, typename _Dom::value_type>, typename std::__fun<std::__less_equal, typename _Dom1::value_type>::result_type> std::operator<=(const std::_Expr<_Dom1, typename _Dom1::value_type>&, const std::valarray<typename _Dom::value_type>&)' 421 | _DEFINE_EXPR_BINARY_OPERATOR(<=, __less_equal) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/9/bits/valarray_after.h:421:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/valarray:603, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:95, from main.cpp:1: /usr/include/c++/9/bits/valarray_after.h:421:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__less_equal, std::_ValArray, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__less_equal, typename _Dom1::value_type>::result_type> std::operator<=(const std::valarray<typename _Dom::value_type>&, const std::_Expr<_Dom1, typename _Dom1::value_type>&)' 421 | _DEFINE_EXPR_BINARY_OPERATOR(<=, __less_equal) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/9/bits/valarray_after.h:421:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: mismatched types 'const std::_Expr<_Dom1, typename _Dom1::value_type>' and 'long long int' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:95, from main.cpp:1: /usr/include/c++/9/valarray:1201:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__less_equal, std::_ValArray, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__less_equal, _Tp>::result_type> std::operator<=(const std::valarray<_Tp>&, const std::valarray<_Tp>&)' 1201 | _DEFINE_BINARY_OPERATOR(<=, __less_equal) | ^~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/9/valarray:1201:1: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::valarray<_Tp>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:95, from main.cpp:1: /usr/include/c++/9/valarray:1201:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__less_equal, std::_ValArray, std::_Constant, _Tp, _Tp>, typename std::__fun<std::__less_equal, _Tp>::result_type> std::operator<=(const std::valarray<_Tp>&, const typename std::valarray<_Tp>::value_type&)' 1201 | _DEFINE_BINARY_OPERATOR(<=, __less_equal) | ^~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/9/valarray:1201:1: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::valarray<_Tp>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:95, from main.cpp:1: /usr/include/c++/9/valarray:1201:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__less_equal, std::_Constant, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__less_equal, _Tp>::result_type> std::operator<=(const typename std::valarray<_Tp>::value_type&, const std::valarray<_Tp>&)' 1201 | _DEFINE_BINARY_OPERATOR(<=, __less_equal) | ^~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/9/valarray:1201:1: note: template argument deduction/substitution failed: main.cpp:32:23: note: mismatched types 'const std::valarray<_Tp>' and 'long long int' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/forward_list:38, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:104, from main.cpp:1: /usr/include/c++/9/bits/forward_list.h:1472:5: note: candidate: 'template<class _Tp, class _Alloc> bool std::operator<=(const std::forward_list<_Tp, _Alloc>&, const std::forward_list<_Tp, _Alloc>&)' 1472 | operator<=(const forward_list<_Tp, _Alloc>& __lx, | ^~~~~~~~ /usr/include/c++/9/bits/forward_list.h:1472:5: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::forward_list<_Tp, _Alloc>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/c++/9/future:39, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:105, from main.cpp:1: /usr/include/c++/9/thread:298:3: note: candidate: 'bool std::operator<=(std::thread::id, std::thread::id)' 298 | operator<=(thread::id __x, thread::id __y) noexcept | ^~~~~~~~ /usr/include/c++/9/thread:298:25: note: no known conversion for argument 1 from 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} to 'std::thread::id' 298 | operator<=(thread::id __x, thread::id __y) noexcept | ~~~~~~~~~~~^~~ In file included from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:133, from main.cpp:1: /usr/include/c++/9/variant:1185:3: note: candidate: 'template<class ... _Types> constexpr bool std::operator<=(const std::variant<_Types ...>&, const std::variant<_Types ...>&)' 1185 | _VARIANT_RELATION_FUNCTION_TEMPLATE(<=, less_equal) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/9/variant:1185:3: note: template argument deduction/substitution failed: main.cpp:32:23: note: 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} is not derived from 'const std::variant<_Types ...>' 32 | cout << rg <= k ? "yes" : "no" << '\n'; | ^ In file included from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:133, from main.cpp:1: /usr/include/c++/9/variant:1185:3: note: candidate: 'constexpr bool std::operator<=(std::monostate, std::monostate)' 1185 | _VARIANT_RELATION_FUNCTION_TEMPLATE(<=, less_equal) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/9/variant:1185:3: note: no known conversion for argument 1 from 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'} to 'std::monostate' 1185 | _VARIANT_RELATION_FUNCTION_TEMPLATE(<=, less_equal) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated due to -fmax-errors=1.
最新发布
12-10
In file included from /usr/include/c++/11/bits/stl_algobase.h:71, from /usr/include/c++/11/bits/char_traits.h:39, from /usr/include/c++/11/ios:40, from /usr/include/c++/11/ostream:38, from /usr/include/c++/11/iostream:39, from Main.cc:1: /usr/include/c++/11/bits/predefined_ops.h: In instantiation of ‘bool __gnu_cxx::__ops::_Iter_comp_val<_Compare>::operator()(_Iterator, _Value&) [with _Iterator = __gnu_cxx::__normal_iterator<HuffmanNode**, std::vector<HuffmanNode*> >; _Value = HuffmanNode*; _Compare = std::greater<HuffmanNode>]’: /usr/include/c++/11/bits/stl_heap.h:139:48: required from ‘void std::__push_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare&) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<HuffmanNode**, std::vector<HuffmanNode*> >; _Distance = long int; _Tp = HuffmanNode*; _Compare = __gnu_cxx::__ops::_Iter_comp_val<std::greater<HuffmanNode> >]’ /usr/include/c++/11/bits/stl_heap.h:215:23: required from ‘void std::push_heap(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<HuffmanNode**, std::vector<HuffmanNode*> >; _Compare = std::greater<HuffmanNode>]’ /usr/include/c++/11/bits/stl_queue.h:651:16: required from ‘void std::priority_queue<_Tp, _Sequence, _Compare>::push(std::priority_queue<_Tp, _Sequence, _Compare>::value_type&&) [with _Tp = HuffmanNode*; _Sequence = std::vector<HuffmanNode*>; _Compare = std::greater<HuffmanNode>; std::priority_queue<_Tp, _Sequence, _Compare>::value_type = HuffmanNode*]’ Main.cc:45:21: required from here /usr/include/c++/11/bits/predefined_ops.h:196:30: error: no match for call to ‘(std::greater<HuffmanNode>) (HuffmanNode*&, HuffmanNode*&)’ 196 | { return bool(_M_comp(*__it, __val)); } | ~~~~~~~^~~~~~~~~~~~~~ In file included from /usr/include/c++/11/string:48, from /usr/include/c++/11/bits/locale_classes.h:40, from /usr/include/c++/11/bits/ios_base.h:41, from /usr/include/c++/11/ios:42, from /usr/include/c++/11/ostream:38, from /usr/include/c++/11/iostream:39, from Main.cc:1: /usr/include/c++/11/bits/stl_function.h:389:7: note: candidate: ‘constexpr bool std::greater<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = HuffmanNode]’ 389 | operator()(const _Tp& __x, const _Tp& __y) const | ^~~~~~~~ /usr/include/c++/11/bits/stl_function.h:389:29: note: no known conversion for argument 1 from ‘HuffmanNode*’ to ‘const HuffmanNode&’ 389 | operator()(const _Tp& __x, const _Tp& __y) const | ~~~~~~~~~~~^~~ In file included from /usr/include/c++/11/bits/stl_algobase.h:71, from /usr/include/c++/11/bits/char_traits.h:39, from /usr/include/c++/11/ios:40, from /usr/include/c++/11/ostream:38, from /usr/include/c++/11/iostream:39, from Main.cc:1: /usr/include/c++/11/bits/predefined_ops.h: In instantiation of ‘constexpr bool __gnu_cxx::__ops::_Iter_comp_iter<_Compare>::operator()(_Iterator1, _Iterator2) [with _Iterator1 = __gnu_cxx::__normal_iterator<HuffmanNode**, std::vector<HuffmanNode*> >; _Iterator2 = __gnu_cxx::__normal_iterator<HuffmanNode**, std::vector<HuffmanNode*> >; _Compare = std::greater<HuffmanNode>]’: /usr/include/c++/11/bits/stl_heap.h:231:14: required from ‘void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<HuffmanNode**, std::vector<HuffmanNode*> >; _Distance = long int; _Tp = HuffmanNode*; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<std::greater<HuffmanNode> >]’ /usr/include/c++/11/bits/stl_heap.h:263:25: required from ‘void std::__pop_heap(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare&) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<HuffmanNode**, std::vector<HuffmanNode*> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<std::greater<HuffmanNode> >]’ /usr/include/c++/11/bits/stl_heap.h:332:19: required from ‘void std::pop_heap(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<HuffmanNode**, std::vector<HuffmanNode*> >; _Compare = std::greater<HuffmanNode>]’ /usr/include/c++/11/bits/stl_queue.h:678:15: required from ‘void std::priority_queue<_Tp, _Sequence, _Compare>::pop() [with _Tp = HuffmanNode*; _Sequence = std::vector<HuffmanNode*>; _Compare = std::greater<HuffmanNode>]’ Main.cc:50:55: required from here /usr/include/c++/11/bits/predefined_ops.h:158:30: error: no match for call to ‘(std::greater<HuffmanNode>) (HuffmanNode*&, HuffmanNode*&)’ 158 | { return bool(_M_comp(*__it1, *__it2)); } | ~~~~~~~^~~~~~~~~~~~~~~~ In file included from /usr/include/c++/11/string:48, from /usr/include/c++/11/bits/locale_classes.h:40, from /usr/include/c++/11/bits/ios_base.h:41, from /usr/include/c++/11/ios:42, from /usr/include/c++/11/ostream:38, from /usr/include/c++/11/iostream:39, from Main.cc:1: /usr/include/c++/11/bits/stl_function.h:389:7: note: candidate: ‘constexpr bool std::greater<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = HuffmanNode]’ 389 | operator()(const _Tp& __x, const _Tp& __y) const | ^~~~~~~~ /usr/include/c++/11/bits/stl_function.h:389:29: note: no known conversion for argument 1 from ‘HuffmanNode*’ to ‘const HuffmanNode&’ 389 | operator()(const _Tp& __x, const _Tp& __y) const | ~~~~~~~~~~~^~~
11-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白行峰 (花名)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值