map 的参数一共有3个,分别是key,value,第三个参数是一个类,可以对map的key值进行排序。
代码如下所示:
map> a; a['a'] = 3; a['c'] = 1; a['d'] = 4; a['b'] = 5; a['e'] = 1; for (auto i : a) { cout << i.first << ":" << i.second << endl; }
结果如下所示:可以看出来greater是由大到小的排序
这里的greater实际上是一个仿函数:可以被看作一个对象,后面再详细了解。
//自定义的仿函数
struct _greater
{
// 必须要加上const :代表该方法为常方法:即传递进来的数据是不可以被改变的。
bool operator()(const char& left, const char& right)const
{
return left > right;
}
};
注意:unordered_map是没有比较函数这个参数,所以不能传入less或者greater
定义如下:
template < class Key, // unordered_map::key_type
class T, // unordered_map::mapped_type
class Hash = hash, // unordered_map::hasher
class Pred = equal_to, // unordered_map::key_equal
class Alloc = allocator< pair > // unordered_map::allocator_type
> class unordered_map;
对key 和value值进行排序
因为map的模板里面没有对value的值进行排序的参数,所以只能借助sort函数,然而sort函数只能对vector,list,queue等排序,无法对map排序,那么就需要把map的值放入vector中在对vector进行排序,再对vector进行输出,从而间接实现了对map的排序。sort也有第三个参数,跟上面那个map类似,所以可以写一个类或者函数来将其排序。 测试代码如下:这里map换成unordered_map也是可以的。 结果如下所示:可以看出:c和e:value值相等的时候,是按照key进行比较的。 优先级队列greater和sort的比较 C++ 自定义比较:仿函数、函数与重载操作符
代码如下:
注意:lbool cmp(pair
int main()
{
map
赋几篇讲解的比较好的博客:
关于map:key或者value的比较



