set集合容器自定義比較函數

set中自定義比較函數

使用insert()將元素插入到集合中去的時候,集合會根據設定的比較函數將該元素放到該放的節點上去。在定義集合的時候,如果沒有

指定比較函數,那麼採用默認的比較函數(按鍵值又小到大的順序插入元素)。

編寫比較函數的兩張方法:

1.如果元素不是結構體,那麼可以編寫比較函數。

#include <iostream>
#include <set>
#include <iterator>
using namespace std;

//自定義比較函數myComp,重載操作符 ()
struct myComp
{
	bool operator() (const int &a, const int &b)
	{
		return a > b;	//從大到小排序
		//return a < b;	//從小到大排序
	}
};

int main()
{
	set<int, myComp> s1;
	for(int i = 1; i < 6; i++)
		s1.insert(i*i);
	s1.insert(8);
	//ostream_iterator<int> output(cout, " ");
	set<int, myComp>::iterator it = s1.begin();
	for(; it != s1.end(); it++)
	{
		cout<<*it<<" ";
	}

	return 0;
}

2.如果元素是結構體,那麼可以直接把比較函數寫在結構體內。

 

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

struct Info
{
	string name;
	float score;
	//重載操作符<,自定義排序規則
	bool operator< (const Info &a)const
	{
		//return a.score < score;	//按score由大到小排列
		return a.score > score;	//由小到大排列
	}
};

int main()
{
	set<Info> s;
	Info info;
	info.name = "Messi";
	info.score = 8.5;
	s.insert(info);
	info.name = "Ronae";
	info.score = 9.0;
	s.insert(info);
	info.name = "My";
	info.score = 7.0;
	s.insert(info);
	info.name = "Perno";
	info.score = 8.0;
	s.insert(info);
	info.name = "Arzar";
	info.score = 8.5;
	s.insert(info);
	set<Info>::iterator it;
	for(it = s.begin(); it != s.end(); it++)
	{
		cout<<it->name<<" : ";
		cout<<(*it).score<<endl;
	}
		return 0;
}



 

發佈了37 篇原創文章 · 獲贊 16 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章