zoukankan      html  css  js  c++  java
  • C++ Primer笔记7_STL之关联容器

    关联容器

    与顺序容器不同,关联容器的元素是按keyword来訪问和保存的。而顺序容器中的元素是按他们在容器中的位置来顺序保存的。

    关联容器最常见的是map、set、multimap、multiset

    map的元素以键-值【key-value】对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据。

    set仅包括一个键。并有效的支持关于某个键是否存在的查询。


    pair类型

    首先介绍下pair,pair定义在utility头文件里,一个pair保存两个数据成员,类似容器,pair是一个用来生成特点类型的模板。

    当创建一个pair时,我们必须提供两个类型名。

    pair<string, string> a; //保存两个string

    pair<string, int> b; //一个保存string,一个保存int

    能够使用make_pair来构建一个pair

    #include <iostream>
    #include <utility>
    
    using namespace std;
    
    int main()
    {
    	typedef pair<string, size_t> PS;
    	PS p("hello", 10);//等价于pair<string, size_t> p("hello", 10);
    
    	PS p1 = make_pair("SCOTT", 20);//make_pair(v1, v2); 以v1、v2来构建一个pair
    
    	cout << p.first << endl;
    	cout << p.second << endl;
    
    	cout << p1.first << endl;
    	cout << p1.second << endl;
    	
    	return 0;
    }
    

    map对象

    定义map对象:

    map<string, int> p;//定义一个空map

    map<K, V>m;//——创建一个名为m的空对象,键和值类型分别为K和V
    map<K, V>m(m2);//——m是m2的副本。注意K和V的值要同样
    map<K, V>m(b,e);//——创建map类型的对象m,存储迭代器b和e标记的范围内全部元素的副本。


    关联容器操作:
    key_type——此容器类型的keyword类型

    mapped_type——每一个keyword关联的类型;仅仅适用于map

    value_type——对于set。与key_value同样。对于map。为pair类型:pair<const key_type, mapped_type>

    #include <iostream>
    #include <map>
    using namespace std;
    
    int main()
    {
    	map<string, int> p;
    	p.insert(make_pair("Hello", 20));
    	map<string, int>::iterator i = p.begin();
    
    	map<string, int>::key_type first = i->first;//map对象自己定义了key_type与mapped_type两个类型
    	map<string, int>::mapped_type second = i->second;
    
    	cout << first << endl;
    	cout << second << endl;
    
    	while(i!=p.end())
    	{
    		cout << i->first << " " << i->second << endl;
    		++i;
    	}
    
    	
    
    	return 0;
    }

    给map加入元素:

        1、能够使用insert成员实现;

        2、或者先通过下标操作符获取元素,然后给获取的元素赋值。

       使用下标訪问map与使用下标訪问数组或vector的行为截然不同用下标訪问不存在的元素将导致在map容器中加入一个新元素,它的键即为该下标值


    查找与统计map中的元素:

        1、使用m.count(k); 统计m中k出现的次数

        2、使用m.find(k);查找以k为索引的元素。假设存在返回指向该元素的迭代器,否则返回末端迭代器


    统计单词出现的次数:

    #include <iostream>
    #include <map>
    
    using namespace std;
    
    int main()
    {
    	string s;
    	map<string, int> wordCnt;
    	map<string, int>::iterator i;
    
    	while(cin >> s)
    	{
    		wordCnt[s]++;
    	}
    	
    	for(i = wordCnt.begin(); i!=wordCnt.end(); ++i)
    	{
    		cout << i->first << " " << i->second << endl;
    	}
    
    
    	return 0;
    }




  • 相关阅读:
    在 Linux 上如何挂载 qcow2 磁盘镜像
    CentOS ISO 下载地址
    构建ceph deb 安装包
    ceph 源码安装 configure: error: "Can't find boost spirit headers"
    sudo: 没有终端存在,且未指定 askpass 程序
    ubuntu14.04 下出现 libmysqlclient.so.20 找不到问题
    binary-tree-postorder-traversal leetcode C++
    binary-tree-preorder-traversal leetcode C++
    candy leetcode C++
    clone-graph leetcode C++
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5082171.html
Copyright © 2011-2022 走看看