J'essaie de trier ma carte non ordonnée en utilisant les valeurs.Trier la fonction cmp sur une carte non ordonnée
C'est le code que j'ai:
#include <iostream>
#include <algorithm>
#include <string>
#include <unordered_map>
using namespace std;
bool cmp(pair<char,int> &left, pair<char,int> &right){
cout<<"Inside comp function"<<endl;
return left.second < right.second;
}
int main(){
int len;
unordered_map<char,int> charCount;
cin >> len;
string s,t;
cin >> s;
for(int i=0;i<s.length();i++){
if(charCount.find(s[i]) != charCount.end()){
charCount[s[i]]++;
}else{
charCount.insert(make_pair<char&,int>(s[i],1));
}
}
sort(charCount.begin(),charCount.end(),cmp);
for(auto& it:charCount){
cout <<it.first<<" -> "<<it.second<<endl;
}
cout<<endl;
return 0;
}
C'est l'erreur que je reçois:
In file included from /usr/include/c++/4.9/algorithm:62:0,
from solution.cc:21:
/usr/include/c++/4.9/bits/stl_algo.h: In instantiation of 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = std::__detail::_Node_iterator<std::pair<const char, int>, false, false>; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<bool (*)(std::pair<char, int>&, std::pair<char, int>&)>]':
/usr/include/c++/4.9/bits/stl_algo.h:4717:78: required from 'void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = std::__detail::_Node_iterator<std::pair<const char, int>, false, false>; _Compare = bool (*)(std::pair<char, int>&, std::pair<char, int>&)]'
solution.cc:58:49: required from here
/usr/include/c++/4.9/bits/stl_algo.h:1968:22: error: no match for 'operator-' (operand types are 'std::__detail::_Node_iterator<std::pair<const char, int>, false, false>' and 'std::__detail::_Node_iterator<std::pair<const char, int>, false, false>')
std::__lg(__last - __first) * 2,
^
/usr/include/c++/4.9/bits/stl_algo.h:1968:22: note: candidates are:
In file included from /usr/include/c++/4.9/bits/stl_algobase.h:67:0,
from /usr/include/c++/4.9/bits/stl_tree.h:61,
from /usr/include/c++/4.9/map:60,
from solution.cc:1:
/usr/include/c++/4.9/bits/stl_iterator.h:328:5: note: template<class _Iterator> typename std::reverse_iterator<_Iterator>::difference_type std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)
operator-(const reverse_iterator<_Iterator>& __x,
^
Quelqu'un peut-il s'il vous plaît me guider la façon de corriger la fonction de comparaison? Je vais prendre mon poste si quelqu'un pense que ce n'est pas le bon forum pour poser cette question. Merci et attendons avec impatience votre aide !!!
'bool cmp (const paire & gauche, const paire & right) {'très probablement. –
@ πάνταῥεῖ Ce n'est pas ça - il essaie de trier une carte non ordonnée. – dasblinkenlight
@dasblinkenlight Je vois. –