如下:
stable_sort(h.begin(), h.end(), [&](pair<int, int> x, pair<int, int> y) {return x.second > y.second;});
CE
其中 h 为 __gnu_pbds::gp_hash_table<int, int>
报错信息:
In file included from E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/algorithm:61,
from E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32/bits/stdc++.h:51,
from 棰pp:1:
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_algo.h: In instantiation of 'void std::__stable_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_pbds::detail::gp_ht_map<int, int, tr1::hash<int>, equal_to<int>, allocator<char>, false, __gnu_pbds::direct_mask_range_hashing<>, __gnu_pbds::linear_probe_fn<long long unsigned int>, __gnu_pbds::hash_standard_resize_policy<__gnu_pbds::hash_exponential_size_policy<>, __gnu_pbds::hash_load_check_resize_trigger<>, false, long long unsigned int> >::iterator_; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(pair<int, int>, pair<int, int>)> >]':
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_algo.h:5119:36: required from 'void std::stable_sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_pbds::detail::gp_ht_map<int, int, tr1::hash<int>, equal_to<int>, allocator<char>, false, __gnu_pbds::direct_mask_range_hashing<>, __gnu_pbds::linear_probe_fn<long long unsigned int>, __gnu_pbds::hash_standard_resize_policy<__gnu_pbds::hash_exponential_size_policy<>, __gnu_pbds::hash_load_check_resize_trigger<>, false, long long unsigned int> >::iterator_; _Compare = main()::<lambda(pair<int, int>, pair<int, int>)>]'
棰pp:12:16: required from here
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_algo.h:5038:38: error: no match for 'operator-' (operand types are '__gnu_pbds::detail::gp_ht_map<int, int, std::tr1::hash<int>, std::equal_to<int>, std::allocator<char>, false, __gnu_pbds::direct_mask_range_hashing<>, __gnu_pbds::linear_probe_fn<long long unsigned int>, __gnu_pbds::hash_standard_resize_policy<__gnu_pbds::hash_exponential_size_policy<>, __gnu_pbds::hash_load_check_resize_trigger<>, false, long long unsigned int> >::iterator_' and '__gnu_pbds::detail::gp_ht_map<int, int, std::tr1::hash<int>, std::equal_to<int>, std::allocator<char>, false, __gnu_pbds::direct_mask_range_hashing<>, __gnu_pbds::linear_probe_fn<long long unsigned int>, __gnu_pbds::hash_standard_resize_policy<__gnu_pbds::hash_exponential_size_policy<>, __gnu_pbds::hash_load_check_resize_trigger<>, false, long long unsigned int> >::iterator_')
5038 | _TmpBuf __buf(__first, (__last - __first + 1) / 2);
| ~~~~~~~^~~~~~~~~
In file included from E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_algobase.h:67,
from E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/algorithm:60:
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_iterator.h:625:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr decltype ((__y.base() - __x.base())) std::operator-(const reverse_iterator<_Iterator>&, const reverse_iterator<_IteratorR>&)'
625 | operator-(const reverse_iterator<_IteratorL>& __x,
| ^~~~~~~~
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_iterator.h:625:5: note: template argument deduction/substitution failed:
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_algo.h:5038:38: note: '__gnu_pbds::detail::gp_ht_map<int, int, std::tr1::hash<int>, std::equal_to<int>, std::allocator<char>, false, __gnu_pbds::direct_mask_range_hashing<>, __gnu_pbds::linear_probe_fn<long long unsigned int>, __gnu_pbds::hash_standard_resize_policy<__gnu_pbds::hash_exponential_size_policy<>, __gnu_pbds::hash_load_check_resize_trigger<>, false, long long unsigned int> >::iterator_' is not derived from 'const std::reverse_iterator<_Iterator>'
5038 | _TmpBuf __buf(__first, (__last - __first + 1) / 2);
| ~~~~~~~^~~~~~~~~
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_iterator.h:1800:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr decltype ((__x.base() - __y.base())) std::operator-(const move_iterator<_IteratorL>&, const move_iterator<_IteratorR>&)'
1800 | operator-(const move_iterator<_IteratorL>& __x,
| ^~~~~~~~
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_iterator.h:1800:5: note: template argument deduction/substitution failed:
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_algo.h:5038:38: note: '__gnu_pbds::detail::gp_ht_map<int, int, std::tr1::hash<int>, std::equal_to<int>, std::allocator<char>, false, __gnu_pbds::direct_mask_range_hashing<>, __gnu_pbds::linear_probe_fn<long long unsigned int>, __gnu_pbds::hash_standard_resize_policy<__gnu_pbds::hash_exponential_size_policy<>, __gnu_pbds::hash_load_check_resize_trigger<>, false, long long unsigned int> >::iterator_' is not derived from 'const std::move_iterator<_IteratorL>'
5038 | _TmpBuf __buf(__first, (__last - __first + 1) / 2);
| ~~~~~~~^~~~~~~~~
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_algo.h:5042:45: error: no match for 'operator+' (operand types are '__gnu_pbds::detail::gp_ht_map<int, int, std::tr1::hash<int>, std::equal_to<int>, std::allocator<char>, false, __gnu_pbds::direct_mask_range_hashing<>, __gnu_pbds::linear_probe_fn<long long unsigned int>, __gnu_pbds::hash_standard_resize_policy<__gnu_pbds::hash_exponential_size_policy<>, __gnu_pbds::hash_load_check_resize_trigger<>, false, long long unsigned int> >::iterator_' and '_DistanceType' {aka 'long long int'})
5042 | __first + _DistanceType(__buf.size()),
| ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_iterator.h:634:5: note: candidate: 'template<class _Iterator> constexpr std::reverse_iterator<_Iterator> std::operator+(typename reverse_iterator<_Iterator>::difference_type, const reverse_iterator<_Iterator>&)'
634 | operator+(typename reverse_iterator<_Iterator>::difference_type __n,
| ^~~~~~~~
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_iterator.h:634:5: note: template argument deduction/substitution failed:
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_algo.h:5042:45: note: mismatched types 'const std::reverse_iterator<_Iterator>' and '_DistanceType' {aka 'long long int'}
5042 | __first + _DistanceType(__buf.size()),
| ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_iterator.h:1808:5: note: candidate: 'template<class _Iterator> constexpr std::move_iterator<_IteratorL> std::operator+(typename move_iterator<_IteratorL>::difference_type, const move_iterator<_IteratorL>&)'
1808 | operator+(typename move_iterator<_Iterator>::difference_type __n,
| ^~~~~~~~
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_iterator.h:1808:5: note: template argument deduction/substitution failed:
E:/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/stl_algo.h:5042:45: note: mismatched types 'const std::move_iterator<_IteratorL>' and '_DistanceType' {aka 'long long int'}
5042 | __first + _DistanceType(__buf.size()),
| ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~