c++中map按key和value排序

 1 ```
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<vector>
 5 #include<map>
 6 #include<set>
 7 using namespace std;
 8
 9 /*按key升序*/
10 void test01(){
11     map<string,int,less<string> > map1;
12     map1.insert(pair<string,int>("aba",3));
13     map1.insert(pair<string,int>("aaa",2));
14     map1.insert(pair<string,int>("ddd",1));
15     map1.insert(pair<string,int>("ccc",4));
16
17     for(map<string,int>::iterator it=map1.begin(); it!=map1.end(); it++ ){
18         cout<<(*it).first<<" : "<<(*it).second<<endl;
19     }
20 }
21 /*按key降序*/
22 void test02(){
23     map<string,int,greater<string> > map1;
24     map1.insert(pair<string,int>("aba",3));
25     map1.insert(pair<string,int>("aaa",2));
26     map1.insert(pair<string,int>("ddd",1));
27     map1.insert(pair<string,int>("ccc",4));
28
29     for(map<string,int>::iterator it=map1.begin(); it!=map1.end(); it++ ){
30         cout<<(*it).first<<" : "<<(*it).second<<endl;
31     }
32 }
33 /*----------------------------------------------------*/
34 /*编写类或者结构体按key升序或者降序*/
35 class flag{
36 public:
37     bool operator()(string v1,string v2){
38         return v1<v2;
39     }
40 };
41
42 void test03(){
43     map<string,int,flag> map1;
44     map1.insert(pair<string,int>("aba",3));
45     map1.insert(pair<string,int>("aaa",2));
46     map1.insert(pair<string,int>("ddd",1));
47     map1.insert(pair<string,int>("ccc",4));
48
49     for(map<string,int>::iterator it=map1.begin(); it!=map1.end(); it++ ){
50         cout<<(*it).first<<" : "<<(*it).second<<endl;
51     }
52 }
53 /*-------------------------------------------------------*/
54 /*自定义编写类或者函数或者结构体进行值排序*/
55 /*自定义函数编写不用(),自定义类或者结构体需要()*/
56 bool flag_2(pair<string,int> o1,pair<string,int> o2){
57     return o1.second>o2.second;
58 }
59 class flag_2{
60 public:
61     bool operator()(pair<string,int> o1,pair<string,int> o2){
62         return o1.second>o2.second;
63     }
64 };
65 struct flag_2{
66     bool operator()(pair<string,int> o1,pair<string,int> o2){
67         return o1.second<o2.second;
68     }
69 };
70 void test04(){
71     map<string,int> map1;
72     map1.insert(pair<string,int>("aba",3));
73     map1.insert(pair<string,int>("aaa",2));
74     map1.insert(pair<string,int>("ddd",1));
75     map1.insert(pair<string,int>("ccc",4));
76
77     //利用vector进行value排序
78     vector< pair<string,int> > dic1(map1.begin(),map1.end());
79     sort(dic1.begin(),dic1.end(),flag_2());
80
81     for(int i=0; i<dic1.size(); i++ ){
82         cout<<dic1[i].first<<" "<<dic1[i].second<<endl;
83     }
84 }
85 int main(){
86     //test01();
87     //test02();
88     //test03();
89     test04();
90
91     return 0;
92 }
93
94 ```

原文地址:https://www.cnblogs.com/Bravewtz/p/10325821.html

时间: 2024-10-11 17:18:19

c++中map按key和value排序的相关文章

Java中对listmap根据map某个key值进行排序

Collection提供了排序方法sort(),但对于List<Map> 需要根据Map中某一个或某几个Key进行排序,就需要重写sort()方法来实现了: 实现方式如下: public static void main(String[] args) { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); Map<String, String>

Java Map按照Key和Value排序【转】

package kingtool.sort; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import jav

JAVA中对list map根据map某个key值进行排序

package test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; public class java_ListMapSort { public static void main(String[] args) { // TO

map的key 为指针

STL中map的key能否用char *呢?当然可以! 在程序中需要用到一个map,本来是这样写的,map<string, int> mapStr; 为了追求效率,把string改成了char *,map<char *, int> mapStr;结果呢?可想而知,每次放进去的是指针,当查找的时候就出问题了,总是找不到.因为key中存放的是指针,当然找不到了. 需要重载一下操作符,当查找时比较指针对应的字符串就可以了.修改如下: struct ptrCmp{    bool oper

C++ STL中Map的按Key排序和按Value排序

原文  http://blog.csdn.net/iicy266/article/details/11906189 map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择. 我们这样定义,map<string, int>,其中学生姓名用string类型,作为Key:该学生的成绩用int类型,作为value.这样一来,我们可以根据学

Java中Map根据键值(key)或者值(value)进行排序实现

我们都知道,java中的Map结构是key->value键值对存储的,而且根据Map的特性,同一个Map中 不存在两个Key相同的元素,而value不存在这个限制.换句话说,在同一个Map中Key是唯一的,而value不唯一.Map是一个接口,我们不能 直接声明一个Map类型的对象,在实际开发中,比较常用的Map性数据结构是HashMap和TreeMap,它们都是Map的直接子类.如果考虑到存取 效率的话,建议使用HashMap数据结构,而如果需要考虑到Key的顺序,建议使用TreeMap,但是

C++ STL中Map的按Key排序跟按Value排序(转)

C++ STL中Map的按Key排序和按Value排序 map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区 分),我们用map来进行存储就是个不错的选择. 我们这样定义,map<string, int>,其中学生姓名用string类型,作为Key:该学生的成绩用int类型,作为value.这样一来,我们可以根据学生姓名快速的查找到 他的成绩. 但是,我们除了希望能够查询

c++ map按key或value的值分别进行排序

一.对key值进行特定的排序 map容器里面有两个值一个key一个是value,map<key,value>,其实map里面还有第三个参数,是一个类,用来对map的key进行排序的类,定义如下 template<class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pair<const _Kty, _Ty> > > class map less<_Kt

Java Map按键(Key)排序和按值(Value)排序

Map排序的方式有很多种,两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value).1.按键排序jdk内置的java.util包下的TreeMap<K,V>既可满足此类需求,向其构造方法 TreeMap(Comparator<? super K> comparator)  传入我们自定义的比较器即可实现按键排序. Java代码   public class MapSortDemo { public static void main(Strin