zoukankan      html  css  js  c++  java
  • 关联容器

    目录:

    *[1.问题的来源](#1.source of problem)
    *[2.关联容器学习](#2.associative-container learning)

    1.问题来源

    面试题:最小的k个树
    借助容器来实现,使用红黑树保证删除,插入操作都能在O(logK)实现,STL中的模版直接使用
    关于mulitset的迭代器及其定义存在问题

    typedef multiset<int,greater<int>>                 intSet;      // 关键字可以重复出现的有序集合
    typedef multiset<int,greater<int>>::iterator  setIterator;   // 上面这两个定义都存在问题?
    
    void GetLastNumbers2(const vector<int>& data,intSet& leastNumbers,int k)
    {
    	leastNumbers.clear();                                         // 容器清空
    	if(k<1 || data.size()<k)                                         // 错误判断
    		return;
    	vector<int>::const_iterator iter=data.begin();         // 定义迭代器
    	// for(auto it=data.begin();it!=data.end();it++)       // 直接使用?觉得也可以
    	for(;iter!=data.end();++iter)
    	{
    		if(leastNumbers.size()<k)                            // 容器中元素不足k,元素直接进入容器
    		{
    			leastNumbers.insert(*iter);                  // 必须是解引用
    		}
    		else
    		{
    			setIterator iterGreatest=leastNumbers.begin();      // 小于其最大元素
    			if(*iter<*(leastNumbers.begin()))
    			{
    				leastNumbers.erase(iterGreatest);
    				leastNumbers.insert(*iter);
    			}
    		}
    	}
    }
    

    2.关联容器学习

    关联容器预览

    --------------------------------------

    关联容器 是否有序 性质
    map 有序 关联数组,保存键值对 key-value
    multimap 有序 关键字可重复出现的map
    set 有序 关键字即是值,只保存关键字
    multiset 有序 关键字可重复的set
    unordered_map 无序 哈希函数组织的map
    unordered_set 无序 哈希函数组织的set
    unordered_multimap 无序 哈希map,关键字可重复
    unordered_multiset 无序 哈希set,关键字可重复

    关联容器操作

    • key_type

    容器的关键字类型

    • mapped_type

    关键字关联的模型,map独有

    • value_type

    对于set而言 value_type==key_type ; map 而言 value_type 为pair<const key_value,mapped_value>

    set<string>::key_type v1           //v1 is string
    set<string>::value_type v         // v  is string
    map<string,int>::value_type v2  // v2 is pair<const string ,int >
    map<string,int >::mapped_type v //v is int
    

    set的迭代器是const的

    添加元素:

    map添加元素必须是pair

    map.insert(value_type);
    set.inesert(vector.cbegin(),vector.cend());
    

    问题还是没有彻底解决

    typedef multiset<int,greater<int>>                 intSet;      // 这个set的定义真的不理解  set不是只有key_type类型
    typedef multiset<int,greater<int>>::iterator  setIterator;   
    

    自己得出的结论是 greater<int> 表示的是 multiset 的顺序

    
    // 这个set中的键 是按照从小到大的顺序进行有序排列的
    typedef multiset<int,greater<int>>                 intSet;   
    

    补充的知识点
    less<type>,greater<type> 称之为比较仿函数 放在定义的结尾

    这个也用来最大堆和最小堆的实现 - 剑指offer p216面试题41.数据流中的中位数

  • 相关阅读:
    1 说在前面的一些话,给想学习编程的人
    springboot使用api操作HBase之shell
    HBase的安装及使用
    spring boot 多数据源加载原理
    架构师之路
    Libra和中国央行数字货币(DCEP)的对比
    微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨
    海底光缆知识科普
    jmeter安装配置教程及使用
    CountDownLatch 部分加载和同时并发业务。
  • 原文地址:https://www.cnblogs.com/GeekDanny/p/10224784.html
Copyright © 2011-2022 走看看