C++ 中的集合与字典

基本的关联式容器主要有:set、multiset、map 和 multimap,这四种容器可以分为两组:map 和 set。

set 可以理解为我们数学中的集合,它可以包含 0 个或多个不重复的数据。map 也是一种集合,它同样可以包含多个元素,每一个元素由一个键值和一个与键值相关联的值组合而成,这样的元素又称键值对(<key, value>)。

map 容器会根据各个元素的键的大小,对所有的元素进行排序,默认会进行升序排序;set 容器也会自行根据各个数据的值的大小进行排序,默认也是升序排序。

在 map 中,各个元素的键是不允许重复的。而 multismap 则允许有多个相同键的键值对。可以这样理解,multimap 是允许有重复键的 map。multiset 和 set 之间的区别,和 multimap 与 map 的区别完全一样。因为 multiset 和 multimap 可以看做是 set 和 map 的扩展,因此我们将主要介绍 set 和 map。

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set <int > s;
    s.insert(s.begin(), 9);
    s.insert(1);
    s.insert(s.end(),4);
    s.insert(5);
    s.insert(6);
    s.insert(7);
    s.insert(9);
    s.insert(0);

    set <int >::const_iterator itor;

    for(itor = s.begin (); itor != s.end(); itor++)
        cout<< *itor<<" ";
    cout<< endl;

    itor = s.find( 2 );

    cout<<"itor=" <<endl;
    if( itor == s.end() )
        cout<< "NOT Found 2!" << endl;
    else
        cout<< "Found 2 in set!" << endl;
    itor = s.find( 5 );
    if( itor == s.end() )
        cout<< "NOT Found 5!" << endl;
    else
        cout<< "Found 5 in set!" << endl;
    return 0;

}
#include <iostream>
#include <map>
using namespace std;
int main()
{
    map< char, int > m;
    m[ 'a' ] = 1;
    m[ 'b' ] = 2;
    m[ 'c' ] = 3;
    m[ 'd' ] = 4;
    m[ 'e' ] = 1;
    m[ 'f' ] = 2;
    m[ 'g' ] = 3;
    m[ 'h' ] = 4;
    m[ 'a' ] = 0;
    map< char, int >::iterator itor;
    for(itor = m.begin(); itor != m.end(); itor++)
        cout << itor->first << " -- " << itor->second <<endl;
    return 0;
}

本例是一个 map 容器的示例程序,我们直接看主函数。主函数一开始定义了一个 map 容器实例 m,map<char, int>m;语句中 char 表示键的数据类型,int 表示与键值对应的值的数据类型。

我们用字符来作为键,键在 map 中是不允许出现重复的,但是与键对应的值 value 可以重复,例如 m[‘a’] 和 m[‘e’] 相同。但是如果键值出现相同,则以最后一次出现的作为结果,例如本例中一开始“m[‘a’] = 1;”,在后面又出现“m[‘a’] = 0;”,此时不会有语法错误,这两句可以理解为“m[‘a’] = 1;”是给“m[‘a’]”赋初值,而“m[‘a’] = 0;”则可以理解为将“m[‘a’]”的值修改为 0。

遍历 map 时同样是使用迭代器,在函数中我们定义了一个 itor 迭代器,由于 map 中是由元素对组成的,包含两个元素,因此遍历方法与前面所介绍的容器稍有不同,前面的容器用 *itor 就可以直接获得所需要的元素,而 map 容器则需要通过 itor->first 访问键值,并用 itor->second 访问与键值对应的值。

例 2 最终运行结果如下:

posted @ 2022-08-19 22:47  luoganttcc  阅读(14)  评论(0)    收藏  举报