C++primer练习11.1-11.8

练习11.1

描述map和vector的不同

::容器中的元素是按照关键字值储存的,关键字值与元素数据建立起对应关系,这就是“关联”的含义。底层数据结构是红黑树,哈希表等,可高效实现按关键字值查找,添加,删除元素等操作,且没有下标上限这一说法,如果在map里没有该下标,会自动生成一个下标命名来进行操作。vector 是对内存的申请是要一大块,而map是一个一个new和delete。

练习11.2

分别给出最适合使用list、vector、deque、map以及set的例子

::list排行榜、vector字面值数据分类、deque排队购票系统、map字典、set个人得分记录高低顺序

练习11.3

编写你自己的单词计数程序

void wordCount()
{

    map<string,string::size_type> word_count;
    set<string> exclude={"the","but","and"};
    string word;
    while(cin>>word)
    {
        if(exclude.find(word)==exclude.end())
        ++word_count[word];
     } 
     for(auto d:word_count)
     cout<<d.first<<d.second;
     cout<<endl;

 } 

练习11.4

扩展你的程序,忽略大小写和标点

string lower(string&a)
{
    string b;
    for(auto &d:a)
    {
        if(!ispunct(d))
        b.push_back(d);
        
    }
    return b;
}
void wordCount()
{

    map<string,string::size_type> word_count;
    set<string> exclude={"the","but","and",",",".","!","?"};
    string word;
    while(cin>>word)
    {
        if(exclude.find(word)==exclude.end())
        ++word_count[lower(word)];
     } 
     for(auto d:word_count)
     cout<<d.first<<d.second;
     cout<<endl;

 } 

练习11.5

解释map和set的区别。你如何选择使用哪个

::

map中的元素是key-value(键值对)对:关键字起到索引的作用,值则表示与索引相关联的数据;Set与之相对就是关键字的简单集合,set中每个元素只包含一个关键字。

set的迭代器是const的,不允许修改元素的值;map允许修改value,但不允许修改key。

对于存储数据是成对的用map

练习11.6

解释set和list的区别。你如何选择使用哪个

::set是无旭且不允许关键字重复的,而list是有序且可以重复的

练习11.7

定义一个map,关键字是家庭的姓,值是一个vector,保存家中孩子们的名。编写代码,实现添加新的家庭成员以及向已有家庭中添加新的孩子

void family()
{
    map<string,vector<string>> roster;
    string firstname;
    while(cin>>firstname)
    {
        string name;
        cin>>name;
        roster[firstname].push_back(name);
    }
    for(auto d:roster){
        cout<<d.second;
    for(auto k:d.second)
    cout<<k;
    cout<<endl;
}}

练习11.8

编写一个程序,在一个vector而不是一个set中保存不重复的单词,使用set的优点是什么

bool inspection(string& a,vector<string>&b)
{
    for(auto d:b)
    {
        if(d==a)
        return false;
    }
    return true;
}
void uniqueword()
{
    vector<string>words;
    string word;
    while(cin>>word)
    {
        if(inspection(word,words))
        words.push_back(word)
    }
}

防止重复

 

posted @ 2022-07-27 21:32  yddl  阅读(34)  评论(0编辑  收藏  举报