欣乐

The eagles are coming!

导航

第12章 multiset多重集合容器

 

 

 

 

/*

  第12章 multiset多重集合容器
   12.1 multiset技术原理
   12.2 multiset应用基础
   12.3 本章小结

*/


//  第12章 multiset多重集合容器
//   12.1 multiset技术原理 ----------------------------------------------------------------------------

//   12.2 multiset应用基础 ----------------------------------------------------------------------------


// 192 遍历
#include <set>
#include <iostream>
int main(void)
{
  using namespace std;
  multiset < int > ms;
  ms.insert(10);
  ms.insert(13);
  ms.insert(11);
  ms.insert(19);
  ms.insert(13);
  ms.insert(19);
  ms.insert(19);
  //打印数据
  multiset < int > ::iterator i, iend;
  iend = ms.end();
  for(i = ms.begin(); i != iend; i++)
  //打印出10 11 13 13 19 19 19
    cout <<  *i << ' ';
  cout << endl;
  return 0;
}


// 193, 反向遍历
#include <set>
#include <iostream>
int main(void)
{
  using namespace std;
  multiset < int > ms;
  ms.insert(10);
  ms.insert(13);
  ms.insert(11);
  ms.insert(19);
  ms.insert(13);
  ms.insert(19);
  ms.insert(19);
  //反向遍历打印
  multiset < int > ::reverse_iterator ri, riend;
  riend = ms.rend();
  for(ri = ms.rbegin(); ri != riend; ri++)
  //打印出10 11 13 13 19 19 19
    cout <<  *ri << ' ';
  cout << endl;
  return 0;
}


// 194 , 要从树的角度去看,相同值的元素在一起的,所以范围容易找
#include <set>
#include <iostream>
int main(void)
{
  using namespace std;
  multiset < int > ms;
  ms.insert(10);
  ms.insert(13); //
  ms.insert(11);
  ms.insert(19);
  ms.insert(13); //
  ms.insert(16);
  ms.insert(13); //
  ms.insert(17);
  //find搜索元素13
  int v = 19;
  multiset < int > ::iterator i_v = ms.find(v);
  cout <<  *i_v << endl;
  //equal_range搜索元素13
  v = 13;
  pair < multiset < int > ::iterator, multiset < int > ::iterator > p =
    ms.equal_range(v);
  cout << "大于等于" << v << "的第一个元素为(x≥k)为 " <<  *p.first << endl;
  cout << "大于" << v << "的第一个元素(x>k)为 " <<  *p.second << endl;
  //打印重复键值元素13
  multiset < int > ::iterator i;
  cout << "键值为" << v << "的所有元素为 ";
  for(i = p.first; i != p.second; i++)
  //打印出13 13 13
    cout <<  *i << ' ';
  cout << "\n\n\n";
  return 0;
}


//196
#include <set>
#include <iostream>
//学生结构体    
struct Student
{
  char *name;
  int year;
  char *addr;
};
//比较函数
struct StudentLess
{
  bool operator()(const Student &s1, const Student &s2)const
  {
    return s1.year < s2.year; //比较学生年龄
  }
};
int main(void)
{
  using namespace std;
  //学生数据
    Student stuArray[] = {
        { "李强", 21, "北京" },
        { "王文", 22, "浙江" },
        { "张天", 21, "上海" },
        { "丁宏", 23, "深圳" },
        { "赵庆", 30, "天津" }
    };
  //创建multiset对象ms
  multiset < Student, StudentLess > ms(stuArray, stuArray + 5, StudentLess());
  //统计
  cout << "学生人数: " << ms.size() << endl << endl;
  cout << "年龄为21岁的学生人数: " << ms.count(stuArray[0]) << endl << endl;
  //打印元素
  multiset < Student > ::iterator i, iend;
  iend = ms.end();
  cout << "姓名    " << "年龄    " << "地址\n";
  for(i = ms.begin(); i != iend; i++)
    cout << (*i).name << '    ' << (*i).year << '    ' << (*i).addr << endl;
  cout << endl;
  return 0;
}



//   12.3 本章小结 ----------------------------------------------------------------------------

 

 

 

 

 

 

TOP

 

posted on 2014-11-20 19:40  欣乐  阅读(128)  评论(0编辑  收藏  举报