首页 > 代码库 > 【足迹C++primer】36、使用关联容器

【足迹C++primer】36、使用关联容器

使用关联容器

两个主要的关联容器map和set
    8个容器:(1)或者是一个set一个map;(2)或者要求不重复的关键字,或者允许重复关键字;
    (3)按顺序保存元素,或无序保存。允许重复关键字的容器的名字中都包含单词multi;不
    保持关键字按顺序存储的容器的名字都以单词unordered开头。


    map类型常常被叫成关联容器,这个是关键字查找
    set就是全由关键字组成

这次写博客的时候有点晚,早上有考试,没办法,不然挂了那就大哭
咳咳,还有现在我发现一个写好博客的好方法了,我不在边写博客边看书了,感觉不太好,我还是先把书本知识学了,在写出来一起分享大笑

使用map

好的这个关联容器的使用时怎么使用的呢?
这里有一个案例,那就是统计单词计数的小程序
以前用vector或字符串数组做的时候好麻烦,但是现在就简单多了!!!
//使用map
//单词计数程序
void fun1()
{
    map<string, size_t> word_count;     //string到size_t的空map
    string word;

    while(cin>>word)
        ++word_count[word];     //提取word的计数器并将其加1

    for(const auto &w : word_count)     //对map中的每个元素打印
    cout<<w.first<<" occurs "<<w.second<<((w.second > 1)?" times ": " time")<<endl;
}

这样做出来是不是觉得很轻松呢,当年我写这个类似的程序的时候居然写了100多行才搞定- -#,当时还小小自得了一把,现在想来真是弱爆了。。。

使用set

//使用set
//单词计数程序,忽略常见单词"the","and","or"等
void fun2()
{
    map<string, size_t> word_count;     //string到size_t的空map
    set<string> exclude={"The","But","And","Or","An","A",
                         "the","but","and","or","an","a"};

    string word;
    while(cin>>word)
        //只统计不在exclude中的单词
        if(exclude.find(word) == exclude.end())
            ++word_count[word];     //获取并递增word的计数器

    for(const auto &w : word_count)     //对map中的每个元素打印
    cout<<w.first<<" occurs "<<w.second<<((w.second > 1)?" times ": " time")<<endl;
}

这个是上面的改进版,但是使用了set加以限制^_^!!

PS:是不是这样就觉得这博客比以前的写的清晰了很多呢?哈哈,我也觉得,而且还轻松了好多呢!!!真是棒棒的!!!