知白守黑

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

    Sets和multisets有着相同的头文件<set>。默认set的元素默认以"<"排序,若要改成降序的在定义类型时可以:set<int, greater<int> > IntSet,注意两个">"之间有空格。Sets中的元素是以二叉树形式组织起来的,在读取的时候采用先根遍历。Multisets除了允许元素重复,和sets在使用上没什么区别。

    Maps和sets的区别在于map处理的元素是一个key/value对,因此插入元素时要myMap.insert(make_pair(4,'a'));这类的操作,读取时则要iter ->second这类的操作,有些编译器不支持->因此要(*iter).second。

    可以把map用作一个关联数组。如:

        map<string, float> MyMap;

        MyMap["Pi"] = 3.1415;//map插入元素的另一种方式

        MyMap["Null"];//这种方式是合法的,赋默认值,这里是0

        MyMap["Pi"] = 1;//当前map共有两个元素,第一个MyMap["Pi"]被覆盖。

    multiMaps不能用作关联数组。

    迭代器分为两类(书上说是两类categories,而不是classes,具体的我也不大明白,似乎前者只注重能力),一类是双向迭代器(Bidirectional iterator),一类是随机访问迭代器(Random access iterator)。他们之间的差别造成的原因是不同容器的实现不同,因此很容易理解为什么lists、sets、maps的迭代器是双向迭代器,而vectors、deques、strings的迭代器是随机访问迭代器。双向迭代器就是可以++,也可以--,而随机访问迭代器除了会++、--外,还可以随机访问、比较大小等。这也就解决了笔记(一)中的疑问:iter != A.end()可以作为所有容器的结束条件,而iter < A.end()只能用作随机访问迭代器。

posted on 2009-06-02 10:43  知白守黑  阅读(183)  评论(0编辑  收藏  举报