排序之set集合排序

#include <iostream>
#include <string>
#include <set>
#include <sstream>
using namespace std;

set<int> dict;

int main()
{
    int num;
	cout<<"输入一串数字,以0结束"<<endl;
	while (cin>>num,num)
	{
		dict.insert(num);
	}
	cout<<"排序之后"<<endl;
	for (set<int>::iterator it = dict.begin();it != dict.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	return 0;
}

升序排列

#include <iostream>  //对于重复的数字将会忽略
#include <string>
#include <set>
#include <sstream>
using namespace std;

set<int> dict;

int main()
{
    int num,flag=1;
	cout<<"输入一串数字,以0结束"<<endl;
	while (cin>>num,num)
	{
		dict.insert(num);
	}
	cout<<"排序之后"<<endl;
	for (set<int>::iterator it = dict.end();it != dict.begin();it--)
	{
		if(flag)  it--,flag=0;
		cout<<*it<<" ";
	}
	cout<<*(dict.begin());
	cout<<endl;
	return 0;
}

降序排列

也可以用反向迭代

#include <iostream>
#include <string>
#include <set>
#include <sstream>
using namespace std;

set<int> dict;

int main()
{
    int num;
	cout<<"输入一串数字,以0结束"<<endl;
	while (cin>>num,num)
	{
		dict.insert(num);
	}
	cout<<"排序之后"<<endl;
	for (set<int>::reverse_iterator it = dict.rbegin();it != dict.rend();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl<<dict.size()<<endl;//验证重复元素不会插入
	return 0;
}

或者自定义比较规则

1.元素不是结构体

#include <iostream>
#include <string>
#include <set>
#include <sstream>
using namespace std;

struct mycom
{
	bool operator () (const int &a,const int &b) //重载()
	{
		if (a != b)
		{
			return a>b;
		}
		else
			return a>b;
	}
};

int main()
{
    int num;
	set<int,mycom> dict;
	cout<<"输入一串数字,以0结束"<<endl;
	while (cin>>num,num)
	{
		dict.insert(num);
	}
	cout<<"排序之后"<<endl;
	for (set<int,mycom>::iterator it = dict.begin();it != dict.end();it++)
	{
		cout<<*it<<" ";
	}

	cout<<endl<<dict.size()<<endl;//验证重复元素不会插入
	return 0;
}

2.元素是结构体

#include<iostream>
#include<set>
#include<string>
using namespace std;
struct Info
{
	string name;
	double score;
	bool operator < (const Info &a) const // 重载“<”操作符,自定义排序规则
	{
		//按score由大到小排序。如果要由小到大排序,使用“>”即可。
		return a.score < score;
	}
};
int main()
{
	set<Info> s;
	Info info;

	//插入三个元素
	info.name = "Jack";
	info.score = 80;
	s.insert(info);
	info.name = "Tom";
	info.score = 99;
	s.insert(info);
	info.name = "Steaven";
	info.score = 60;
	s.insert(info);

	set<Info>::iterator it;
	for(it = s.begin(); it != s.end(); it++)
		cout << (*it).name << " : " << (*it).score << endl;
	return 0;
}

删除与清空

#include <iostream>
#include <string>
#include <set>
#include <sstream>
using namespace std;

set<int> dict;

int main()
{
    int num;
	cout<<"输入一串数字,以0结束"<<endl;
	while (cin>>num,num)
	{
		dict.insert(num);
	}
	cout<<"(升序)排序之后"<<endl;
	for (set<int>::iterator it = dict.begin();it != dict.end();it++)
	{
		cout<<*it<<" ";
	}
    cout<<endl;

	cout<<"需要删除的数字为 ";
	cin>>num;
	dict.erase(num);
    for (set<int>::reverse_iterator rit = dict.rbegin();rit != dict.rend();rit++)
	{
		cout<<*rit<<" ";
	}

	cout<<endl<<"清空之后 ";
	dict.clear();
	cout<<endl<<dict.size()<<endl;//验证重复元素不会插入
	return 0;
}

查找

#include <iostream>
#include <string>
#include <set>
#include <sstream>
using namespace std;

set<int> dict;

int main()
{
    int num;
	cout<<"输入一串数字,以0结束"<<endl;
	while (cin>>num,num)
	{
		dict.insert(num);
	}
	cout<<"(升序)排序之后"<<endl;
	for (set<int>::iterator it = dict.begin();it != dict.end();it++)
	{
		cout<<*it<<" ";
	}
    cout<<endl;

    cout<<"查找的数为 ";
	cin>>num;
	it = dict.find(num);
    if(it == dict.end())
		cout<<"not found";
	else
		cout<<*it;
	cout<<endl<<dict.size()<<endl;//验证重复元素不会插入
	return 0;
}
时间: 2024-10-11 21:12:44

排序之set集合排序的相关文章

java集合排序方法sort的使用

转自  http://blog.csdn.net/a1165117473/article/details/6965652 /** To change this template, choose Tools | Templates* and open the template in the editor.*/ package com.city.test; import java.util.Arrays;import java.util.Comparator;/**** @author LiuB*/

Java-集合--Java集合排序

Java集合排序 前几天在工作的当中遇到对List<Map<String,String>>这样的数据结构按照Map<String,String>中的某个字段排序, 具体的实现为: <span style="font-size:18px;">public void sortList(List<Map<String, String>> list, final String field) { Collections.so

为集合排序的三个方法

// 为集合字符串排序(cmpare:) // - null :空类型  就是字符型的0: // - [NSNull null]是对象类型,能够存入集合的数据:为其分配了内存,但其中的值为空(不能被排序否则程序会崩溃): // - 对非对象类型指针赋空值用null(如C指针) // 对集合内的字符串排序:调用排序方法后会创建一个新的集合返回 // - sortedArrayUsing...(sort:分类) NSArray *group = @[@"red", @"green

Java集合排序

java集合排序 如何给Java中List集合排序呢?前端时间在工作中遇到类似于给这样的结构排序List<Map<String,String>>>按照其中Map中的某个key值排序呢? 集合产生如下: <span style="font-size:18px;">public void sortList(){ List<List<Map<String,String>>> list = new ArrayList

Java集合排序及java集合类详解--(Collection, List, Set, Map)

1         集合框架 1.1         集合框架概述 1.1.1         容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一些有意义的事情. 举例来说,假设要存储许多雇员,不同的雇员的区别仅在于雇员的身份证号.我们可以通过身份证号来顺序存储每个雇员,但是在内存中实现呢?是不是要准备足够的内存来存储1000个雇员,然后再将这些雇员逐一插入?如果已经插入了500条记录,这时需要插入一个身份证号较低的新雇员,该怎么办呢?是在内

对集合排序的三种方式

对集合排序,可能最先想到的是使用OrderBy方法. class Program { static void Main(string[] args) { IEnumerable<Student> result = GetStudents().OrderBy(r => r.Score); foreach (var item in result) { Console.WriteLine(item.Name + "--" + item.Score); } Console.R

最简单的List集合排序方法

将数组按照一定的规则排序最简单的方法就是借助Arrays类的sort方法,那么要实现List集合排序的排序最简单的方式又是什么呢?当然是借助Collections类的sort方法,下面以一个例子来说明如何使用该方法实现List集合的排序: 代码一: package com.ghj.packageofvo; public class User { private String name; //姓名 private String birthday;//出生日期 public User(String

java 集合排序

http://www.cnblogs.com/standcloud/articles/2601914.html java 集合排序 Java API针对集合类型排序提供了两种支持:java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.util.List, java.util.Comparator) 第一个方法要求所排序的元素类必须实现java.lang.Comparable接口.第二个方法要求实现一个j

Java 实现Map集合排序功能

第一步:Map中新增sort临时键 // 初始化Map集合 List<Map<String, String>> columns = new ArrayList<Map<String, String>>(); Map<String, String> c1 = new HashMap<String,String>(); c1.put("sort", "8"); c1.put("title&