在无序映射上排序cmp函数
Sort cmp function on unordered map
我正在尝试使用值排序我的无序映射。
这是我的代码:
#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;
}
这是我得到的错误:
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,
^
谁能指导我如何纠正比较器功能?如果有人觉得这不是问这个问题的合适论坛,我会撤下我的帖子。谢谢,期待您的帮助!
无序映射顾名思义——它是无序的。
不幸的是,消息太神秘了,无法解释发生了什么。基本上,c++抱怨排序需要map迭代器的一个属性,而无序容器的迭代器没有这个属性。
如果你想用无序映射的数据制作有序容器,你需要将数据复制到你可以排序的东西中,比如向量或数组:
vector<pair<char,int>> orderedCounts(charCount.begin(),charCount.end());
sort(orderedCounts.begin(), orderedCounts.end(), cmp);
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 如何使用CMP函数对矢量字符串数组进行排序
- 将带有cmp函数的map传递给函数作为参数
- 在无序映射上排序cmp函数
- cmp函数qsort中未初始化的值