码迷,mamicode.com
首页 > 其他好文 > 详细

STL之set && multiset

时间:2014-09-23 12:06:14      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   ar   strong   for   div   

一、set

在了解关联容器set之前,让我们先来看看下面这个例子,并猜测该例子输出什么:

// stl/set1.cpp

   #include <iostream>
   #include <set>

   int main()
   {
       //type of the collection
       typedef std::set<int> IntSet;

       IntSet coll;        //set container for int values

       /* insert elements from 1 to 6 in arbitray order
        *- value 1 gets inserted twice
        */
       coll.insert(3);
       coll.insert(1);
       coll.insert(5);
       coll.insert(4);
       coll.insert(1);
       coll.insert(6);
       coll.insert(2);

       /* print all elements
        *- iterate over all elements
        */
       IntSet::const_iterator pos;
       for (pos = coll.begin(); pos != coll.end(); ++pos) {
           std::cout << *pos <<  ;
       }
       std::cout << std::endl;
   }

其中,输出的结果为:1 2 3 4 5 6

 

下面,我们根据该输出结果对关联容器set做一个分析:

 

1. set元素的唯一性;

2. set默认按照从小到大排序;This type uses the default sorting criterion, which sorts the elements by using operator <.

  如果你想要改变它的排序方法,需要传递额外的参数,例如:

 typedef set<int,greater<int> > IntSet;

  Note that you have to put a space between the two ">" characters. ">>" would be parsed as shift operator, which would result in a syntax error.

 

二、multiset

If you want to use a multiset rather than a set, you need only change the type of the container (the header file remains the same):

						
   typedef multiset<int> IntSet;

					

A multiset allows duplicates, so it would contain two elements that have value 1. Thus, the output of the program would change to the following:

						
   1 1 2 3 4 5 6

例如:
// stl/mmap1.cpp

   #include <iostream>
   #include <map>
   #include <string>
   using namespace std;

   int main()
   {
       //type of the collection
       typedef multimap<int, string> IntStringMMap;

       IntStringMMap coll;       //set container for int/string values

       //insert some elements in arbitrary order
       //- a value with key 1 gets inserted twice
       coll.insert(make_pair(5,"tagged"));
       coll.insert(make_pair(2,"a"));
       coll.insert(make_pair(1,"this"));
       coll.insert(make_pair(4,"of"));
       coll.insert(make_pair(6,"strings"));
       coll.insert(make_pair(1,"is"));
       coll.insert(make_pair(3,"multimap"));

       /* print all element values
        *- iterate over all elements
        *- element member second is the value
        */
       IntStringMMap::iterator pos;
       for (pos = coll.begin(); pos != coll.end(); ++pos) {
           cout << pos->second <<  ;
       }
       cout << endl;
   }

 



STL之set && multiset

标签:style   blog   color   io   os   ar   strong   for   div   

原文地址:http://www.cnblogs.com/wiessharling/p/3987708.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!