C++温习-标准库-map

关于map,也就是字典,kv键值对。

在C++中,它是一个类模板,它是属于一个关联容器类模板

template < class Key,                                     // map::key_type
           class T,                                       // map::mapped_type
           class Compare = less<Key>,                     // map::key_compare
           class Alloc = allocator<pair<const Key,T> >    // map::allocator_type
           > class map;

我们在新建map类型的时候,必须提供Key 和Value的类型,可选提供比较器和配置器,一般只是在使用自己的类型的时候,才需要提供。

map中,Key是唯一的,不能有多个相同的key,而且都是按照key的大小排序的,也就是说map都是自动排序的,

map里面的数据存储为pair

typedef pair<const Key, T> value_type;

常用的成员变量:

value_type;//pair<const key_type,mapped_type>
iterator;//迭代器,指向value_type
const_iterator;//常量迭代器
reverse_iterator;//逆向迭代器
const_reverse_iterator;//常量,逆向

常用的成员函数:

//1. 迭代器
begin();
end();
rbegin();
rend();
cbegin();//以下C++11新加入
cend();
crbegin();
crend();
//以上都是返回迭代器,其中r开头的表示返回的是逆向的迭代器,c开头的表示返回的是const迭代器。

//2. 容量:
empty();//测试map是否为空
size();//返回容器的大小;

//3. 获取元素
operator[];//可以像普通的数组一样的方式使用。
at(const key_type& k);//C++11新加方法。

//4. 增删改查
insert(const value_type& val);//增
erase(iterator position);//删
size_type erase (const key_type& k);//删
void erase (iterator first, iterator last);//删
clear();//删除所有的数据。
find (const key_type& k);//查
count (const key_type& k);//与find有点功能重复,因为map的key是唯一的,所以count只能返回两个值,0或者1,分别表示存在这个key或者不存在。

字典应该是平时编程中很经常用到的一个数据结构。比如,有时候需要计算一篇文章中的每个单词出现的次数,以形成文章的词向量。

#include<iostream>
#include<map>
using namespace std;
int main()
{
    string temp;
    map<string,int> word_count;
    cout<<"please input the word your want to count, and input the ctrl+D to end of the input"<<endl;
    while(cin>>temp)
    {
    cout<<"input word:";
       // word_count[temp]++;
        // word_count.insert(pair<string,int>(temp,1);
         if( word_count.find(temp)==word_count.end())
         {
         word_count.insert(pair<string,int>(temp,1));
     }
     else
      {
         word_count[temp]++;
      }
    }
    int num_word=word_count.size();
    cout<<"The number of word is:"<<num_word<<endl;
    map<string,int>::iterator itera;
    for(itera=word_count.begin();itera!=word_count.end();itera++)
    {
        cout<<"word: "<<itera->first<<" occur"<<itera->second<<" times"<<endl;
    }
    cout<<"done"<<endl;
    return 0;
}
时间: 2024-08-06 11:50:25

C++温习-标准库-map的相关文章

c/c++ 标准库 map set 大锅炖

标准库 map set 大锅炖 一,关联容器有哪些 按关键字有序保存元素 map 保存key和value set 只保存key mulutimap key可以重复出现 multiset key可以重复出现 无序集合 unordered_map 用哈希函数做成的map unordered_set 用哈希函数做成的set unordered_mulutimap key可以重复出现 unordered_multiset key可以重复出现 二,关联容器的类型别名 类型别名 功能描述 key_type

C++温习-标准库-set

set,就是集合,其满足唯一性, C++中的标准库set是一个类模板, template < class T, // set::key_type/value_type class Compare = less<T>, // set::key_compare/value_compare class Alloc = allocator<T> // set::allocator_type > class set; 正常使用需要提供类别参数如 set<string>

C++温习-标准库-vector

vector是C++中最基本的顺序容器,可把它看作是一个自动可变长度的数组来使用,使用中,比直接定义数组来使用方便,但运行效率会比数组低一些. vector的内部实现,还是数组的形式,当新插入数据使得大于容量时,就会进行重新分配空间,并移动数据,vector并不是每次插入新的数据都重新分配空间,并且移动数据,毕竟这样的效率太低了,通常,它是会新开一个大一些的空间,来避免过于频繁的分配空间和移动数据. vector 当然也是类模板. template < class T, class Alloc

c++ 标准库的各种容器(vector,deque,map,set,unordered_map,unordered_set,list)的性能考虑

转自:http://blog.csdn.net/truexf/article/details/17303263 一.vector vector采用一段连续的内存来存储其元素,向vector添加元素的时候,如果容量不足,vector便会重新malloc一段更大的内存,然后把原内存中的数据memcpy到新的内存中,并free原内存块,然后将新元素加入.vector的元素插入性能跟以下几个要素关系重大: 1. 插入的位置 头部插入:将所有元素后移,然后将新元素插入 中间插入:将插入点后面的元素后移,然

标准库常用包介绍

标准库 https://godoc.org/-/go builtin 包 常量 true,false,iota 函数 len cap close(c chan Type) delete(map,key) make new panic recover 类型 int8 ~ int64 uint8(byte) ~ uint64 uint int  uintptr float32 float64 rune bool error string strings 包 函数 Contains  Index Sp

C++标准库和标准模板库

C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义. 在C++开发中,要尽可能地利用标准库完成.这样做的直接好处包括: (1)成本:已经作为标准提供,何苦再花费时间.人力重新开发呢: (2)质量:标准库的都是经过严格测试的,正确性有保证: (3)效率:关于人的效率已经体现在成本中了,关于代码的执行效率要相信实现标准库的大牛们的水平: (4)良好的编程风格:采用行业中普遍的做法进行开发. 一.C++标准库 C++标准库的内容分为10类, 分别是:C1.语

程序设计语言-标准库概述

1 认识标准库 没有任何一个重要程序只用某种赤裸裸的程序设计语言写出的:首先总要开发出一组支持库,这也形成了进一步工作的基础. 2 第一个程序 #include<iostream>  //指编译器包含位于iostream里的标准流I/O功能的声明 int main() //定义一个main()函数,该函数没有参数,也不做任何事情 { std::cout<<"hello,world!\n"; //字符串文字量"hello,world!\n"将被

Python标准库13 循环器 (itertools)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在循环对象和函数对象中,我们了解了循环器(iterator)的功能.循环器是对象的容器,包含有多个对象.通过调用循环器的next()方法 (__next__()方法,在Python 3.x中),循环器将依次返回一个对象.直到所有的对象遍历穷尽,循环器将举出StopIteration错误. 在for i in iterator结构中,循环器每次返回的对象将赋予给i,直到循环结束.使

第32课 - 初探C++ 标准库

第32课 - 初探C++ 标准库 1. 有趣的重载 操作符 << 的原生意义是按位左移,例: 1  <<  2 ; 其意义是将整数 1 按位左移 2 位,即: 0000 0001   ->    0000 0100 重载左移操作符,将变量或常量左移到一个对象中! 1 #include <stdio.h> 2 3 const char endl = '\n'; 4 5 class Console 6 { 7 public: 8 Console& operat