• map的基本操作


    向map添加元素:

    因为map是不允许出现重复关键字的,所以如果重复插入键相同的元素后面的元素是不会插入成功的,下面是一个验证程序:

    #include<iostream>
    #include<algorithm>
    #include<map>
    #include<string>
    using namespace std;
    
    int main()
    {
    	map<string, int> mmap;
    	mmap.insert({ "wu",1 });
    	mmap.insert({ "xiao",1});
    	mmap.insert({ "wu",2 });
    	mmap.insert({ "xiao",8 });
    	for (auto it : mmap)
    	{
    		cout << it.first << " " << it.second << endl;
    	}
        return 0;
    }
    

      运行结果:

    从运行结果我们可以知道,mmap的第三条个第四条插入语句时没法插入成功的,因为前面已经对相同键值做过了插入操作,后面就不会再插入了。

    如果想要四条语句都插入成功可以考虑用multimap,multimap是可以存在重复键值的,下面是验证程序

    #include<iostream>
    #include<algorithm>
    #include<map>
    #include<string>
    using namespace std;
    
    int main()
    {
    	multimap<string, int> mmap;
    	mmap.insert({ "wu",1 });
    	mmap.insert({ "xiao",1});
    	mmap.insert({ "wu",2 });
    	mmap.insert({ "xiao",8 });
    	for (auto it : mmap)
    	{
    		cout << it.first << " " << it.second << endl;
    	}
        return 0;
    }
    

      运行结果:

     map容器最常用的方法——kv对计数,如果插入的元素还没存在就插入,并给value赋值为1,如果插入的元素已经存在就不再插入而是给对应的键的值加1

    #include<iostream>
    #include<algorithm>
    #include<map>
    #include<string>
    using namespace std;
    
    int main()
    {
    	map<string, int> mmap;
    	string str;
    	while (cin >> str)
    	{
    		mmap[str]++;
    	}
    	for (auto it : mmap)
    	{
    		cout << it.first << " " << it.second << endl;
    	}
        return 0;
    }
    

      运行结果:

     

    map的各种插入数据方式:

    #include <iostream>
    #include<string>
    #include<vector>
    #include<map>
    using namespace std;
    int main()
    {
    	
    	map<string, int>mmap;
    	mmap.insert(pair<string,int>("fsdfads", 43));//第一种插入方式
    	mmap.insert(map<string, int>::value_type("fsdf", 5));//第二种
    	mmap["fsdff"] = 3;//第三种
    	mmap.insert({ "fsd",4 });//第四种
    	for (auto it : mmap)
    	{
    		cout << it.first << " " << it.second << endl;
    	}
    	return  0;
    }
    

      运行结果:

    对map中的value进行排序
    #include <iostream>
    #include<string>
    #include<vector>
    #include<map>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
    	
    	map<string, int>mmap;
    	vector<pair<string, int>>vec;
    	mmap.insert(pair<string,int>("fsdfads", 43));
    	mmap.insert(map<string, int>::value_type("fsdf", 5));
    	mmap["fsdff"] = 3;
    	mmap.insert({ "fsd",4 });
    	//将map的key和value以pair的形式装到vector中,对vector进行排序。 
    	for (auto it = mmap.begin(); it != mmap.end(); it++)
    	{
    		vec.push_back(make_pair(it->first, it->second));
    	}
    	sort(vec.begin(), vec.end(), [](const pair<string, int>&x, const pair<string, int>&y) {return x.second < y.second; });
    	for (auto it : vec)
    	{
    		cout << it.first << " " << it.second << endl;
    	}
    	return  0;
    }
    

      运行结果:

    #include <iostream>
    #include <cstdlib>  
    #include <map>  
    #include <vector>  
    #include <string>  
    #include <algorithm>  
    
    using namespace std;
    
    int cmp(const pair<string, int>& x, const pair<string, int>& y)
    {
    	return x.second > y.second;
    }
    
    void sortMapByValue(map<string, int>& tMap, vector<pair<string, int> >& tVector)
    {
    	for (map<string, int>::iterator curr = tMap.begin(); curr != tMap.end(); curr++)
    		tVector.push_back(make_pair(curr->first, curr->second));
    
    	sort(tVector.begin(), tVector.end(), cmp);
    }
    int main()
    {
    	map<string, int> tMap;
    	string word;
    	while (cin >> word)
    	{
    		pair<map<string, int>::iterator, bool> ret = tMap.insert(make_pair(word, 1));
    		if (!ret.second)
    			++ret.first->second;
    	}
    
    	vector<pair<string, int>> tVector;
    	sortMapByValue(tMap, tVector);
    	for (int i = 0; i < tVector.size(); i++)
    		cout << tVector[i].first << ": " << tVector[i].second << endl;
    
    	system("pause");
    	return 0;
    }
    

      

  • 相关阅读:
    hdu_1052 Tian Ji -- The Horse Racing 贪心
    hdu_1050 Moving Tables 贪心
    模拟退火算法-旅行商问题-matlab实现
    主成分分析与逐步回归分析的区别
    二叉树--后序遍历的非递归算法
    表达式求值--数据结构C语言算法实现
    线性表—单链表的创建、查询、插入、删除、合并
    线性表--顺序线性表-基本操作:建表,插入,删除
    String、String[]、ArrayList<String>之间的转换
    Java反射机制概念及使用
  • 原文地址:https://www.cnblogs.com/wuyepeng/p/9906063.html
Copyright © 2020-2023  润新知